i-school - ¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý¤ÎºîÀ®Îã­¡

¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý


¡¡¥¤¥Ù¥ó¥È¶îÆ°·¿¥×¥í¥°¥é¥ß¥ó¥°¡¢¥¤¥Ù¥ó¥È¥É¥ê¥Ö¥ó¤È¤â¤è¤Ð¤ì¤ë¡¢¥×¥í¥°¥é¥ß¥ó¥°¼êË¡¤Î£±¤Ä¤Ç¤¹¡£


»²¹Í¥µ¥¤¥È
e-words ÍÍ
¥¤¥Ù¥ó¥È¥É¥ê¥Ö¥ó ¡Úevent-driven¡Û ¥¤¥Ù¥ó¥È¶îÆ°·¿



¡¡Î㤨¤Ð¡¢¡Ö¥¹¥¤¥Ã¥Á¤ò²¡¤·¤¿¤é¡¡¢ª¡¡È⤬³«¤¯¡×¡¢¡Ö¥Ü¥¿¥ó¤ò²¡¤·¤¿¤é¡¡¢ª¡¡¥¸¥ã¥ó¥×¤¹¤ë¡×¤È¤¤¤¦·Á¤Ç
¡Ö¤Ê¤Ë¤«¤ò¤·¤¿¤é(¥¤¥Ù¥ó¥È)¡¡¢ª¡¡¤É¤¦¤Ê¤ë¤Î¤«(¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é)¡×¤È¤¤¤¦·Á¼°¤Î¥µ¥¤¥¯¥ë¤ò
¥¤¥Ù¥ó¥Èñ°Ì¤Ç½èÍý¤¬´°·ë¤¹¤ë¤è¤¦¤Ëµ­½Ò¤¹¤ëÊý¼°¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£

¡¡¥¤¥Ù¥ó¥È½èÍý¼«ÂÎ¤Ï event ¥­¡¼¥ï¡¼¥É¤ä delegate ¥­¡¼¥ï¡¼¥É(UnityAction)¤ò³èÍѤ·¤Æ¤âºîÀ®¤Ç¤­¤Þ¤¹¤¬¡¢
UniRx ¤Îµ¡Ç½¤È¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤òÍøÍѤ¹¤ë¤³¤È¤Ç¤â¡¢¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡¤¿¤À¤·¡¢¥²¡¼¥àÆâ¤Î¤¹¤Ù¤Æ¤Î½èÍý¤¬¤³¤Î½èÍý¤ËŬ¤·¤Æ¤¤¤ë¤È¤¤¤¦Ìõ¤Ç¤¢¤ê¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢¼ÂÁõ¤¹¤ëºÝ¤Ë¤Ï¤É¤¦¤¤¤Ã¤¿½èÍý¤òºî¤ê¤¿¤¤¤Î¤«¤ò¹Í¤¨¤Æ¡¢¤½¤Î¾å¤Ç¤É¤Îµ¡Ç½(UniRx ¤Ê¤Î¤«¡¢UnityAciton ¤Ê¤Î¤«¡¢UnityEvent ¤Ê¤Î¤«)¤òºÎÍѤ¹¤ë¤«¸¡Æ¤¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡´ðËÜŪ¤Ë¤Ï¡¢Àè¤Û¤É¤Î¤è¤¦¤Ê¥Ü¥¿¥ó¤ä¥¯¥ê¥Ã¥¯¤Ê¤É¤Î¥¤¥Ù¥ó¥È¤Ë¤Ï¡¢UniRx ¤È¥ª¥Ö¥¶¡¼¥Ð¡¼¥Ñ¥¿¡¼¥ó¤òÍøÍѤ¹¤ë¤È¼ÂÁõ¤·¤ä¤¹¤¤¤Ç¤¹¡£


¥µ¥ó¥×¥ë


¡¡¡Ö¥Ü¥¿¥ó¤ò²¡¤¹¡¡¢ª¡¡Íð¿ô¤ò£±¤Ä·è¤á¤ë¡×¤È¤¤¤¦¥¤¥Ù¥ó¥È¤È¥¤¥Ù¥ó¥È¥Ï¥ó¥É¥é¤ò¶îÆ°¤µ¤»¤ë¥±¡¼¥¹¤Î¥µ¥ó¥×¥ë¤Ç¤¹¡£


Example.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




¡¡¤³¤ÎÎã¤Ç¤Ï¡¢ÊÑ¿ô¤ÎÃͤÎÊѹ¹¤òReactiveProperty¤ò»È¤Ã¤Æ´Æ»ë¤·¤Æ¤¤¤Þ¤¹¡£
ReactiveProperty¤Ï¡¢ÃͤÎÊѹ¹¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë¼«Æ°Åª¤ËÄÌÃΤ·¤Æ¤¯¤ì¤ë»ÅÁȤߤò»ý¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡Subscribe()¥á¥½¥Ã¥É¤ÇÊÑ¿ô¤ÎÊѹ¹¤ò´Æ»ë¤·¡¢Ãͤ¬ÊѤï¤Ã¤¿ºÝ¤Ë¼Â¹Ô¤¹¤ë½èÍý¤òµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤Þ¤¿¡¢¥Ü¥¿¥ó¤Î¥¯¥ê¥Ã¥¯¤ò´Æ»ë¤·¡¢¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿ºÝ¤ËÊÑ¿ô¤ò³ÎÄꤵ¤»¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
variable.Value¤ÇReactiveProperty¤ÎÃͤò¼èÆÀ¡¦ÀßÄꤹ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£



¡¡Unity¤ÈUniRx¤ò»È¤Ã¤¿¾ì¹ç¡¢Subscribe¤·¤¿Observable¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤ò´ÉÍý¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¡¢Observable¤¬¥¢¥¯¥Æ¥£¥Ö¤Ê´Ö¡¢¥á¥â¥ê¥ê¡¼¥¯¤òÈò¤±¤ë¤¿¤á¤Ç¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢Subscribe¤·¤¿Observable¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤ò¼«Æ°Åª¤Ë´ÉÍý¤¹¤ë¤¿¤á¤Ë¡¢Ä̾ïAddTo¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Þ¤¹¡£
AddTo¥á¥½¥Ã¥É¤Ï¡¢Observable¤¬½ªÎ»¤·¤¿¤È¤­¤Ë¡¢¼«Æ°Åª¤ËDispose¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤¿¤á¡¢¥á¥â¥ê¥ê¡¼¥¯¤òËɻߤ¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡¡¤³¤Î¥±¡¼¥¹¤Ë¤ª¤¤¤Æ¤â¡¢¤É¤Á¤é¤ÎSubscribe ¤Ë¤Ï AddTo ¥á¥½¥Ã¥É¤ò»ÈÍѤ·¡¢Observable¤Î¥é¥¤¥Õ¥µ¥¤¥¯¥ë¤ò¼«Æ°Åª¤Ë´ÉÍý¤·¤Æ¤¤¤Þ¤¹¡£


¥µ¥¤¥³¥í¤ò¿¶¤ë¥¤¥Ù¥ó¥È


¡¡Àè¤Û¤É¤ÎÎã¤ò¸µ¤Ë¡¢¡Ö¥Ü¥¿¥ó¤ò²¡¤¹¡¡¢ª¡¡¥µ¥¤¥³¥í¤ò¿¶¤Ã¤Æ½ÐÌܤò·è¤á¤ë¡×¤È¤¤¤¦¥¤¥Ù¥ó¥È½èÍý¤Î¼ÂÁõÎã¤Ç¤¹¡£


DiceRoller.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




¡¡Random.Range()¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ¡¢¥µ¥¤¥³¥í¤ÎÌܤ䥫¡¼¥É¤Î¼ïÎà¤ò¥é¥ó¥À¥à¤Ë·èÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢¤½¤ì¤¾¤ì¤Î·ë²Ì¤òReactiveProperty¤ÇÊÝ»ý¤·¤Æ¤¤¤Þ¤¹¡£
Subscribe()¥á¥½¥Ã¥É¤ÇÊѹ¹¤ò´Æ»ë¤·¤Æ¤¤¤ë¤Î¤Ç¡¢diceResult¤¬Êѹ¹¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢¥Ç¥Ð¥Ã¥°¥í¥°¤Ë·ë²Ì¤ò½ÐÎϤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£


¥«¡¼¥É¤ò£±Ëç°ú¤¯¥¤¥Ù¥ó¥È


¡¡Æ±¤¸¤è¤¦¤Ë¡¢º£Å٤ϡ֥ܥ¿¥ó¤ò²¡¤¹¡¡¢ª¡¡¥«¡¼¥É¤ò£±Ëç°ú¤¯¡×¤È¤¤¤¦¥¤¥Ù¥ó¥È½èÍý¤Î¼ÂÁõÎã¤Ç¤¹¡£
¤³¤Á¤é¤Ë¤Ï¥Ü¥¿¥óÏ¢ÂÇËɻߤνèÍý¤âÄɲ䷤Ƥ¤¤Þ¤¹¡£


CardDealer.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




¡¡Random.Range()¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ¡¢¥«¡¼¥É¤Î¼ïÎà¤ò¥é¥ó¥À¥à¤Ë·èÄꤷ¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢¤½¤ì¤¾¤ì¤Î·ë²Ì¤òReactiveProperty¤ÇÊÝ»ý¤·¤Æ¤¤¤Þ¤¹¡£Subscribe()¥á¥½¥Ã¥É¤ÇÊѹ¹¤ò´Æ»ë¤·¤Æ¤¤¤ë¤Î¤Ç¡¢
cardResult¤¬Êѹ¹¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢¥Ç¥Ð¥Ã¥°¥í¥°¤Ë·ë²Ì¤ò½ÐÎϤ¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

¡¡ThrottleFirst ¥ª¥Ú¥ì¡¼¥¿¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¥Ü¥¿¥ó¤ÎÏ¢ÂÇËɻߤò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£


Ìò³ä¤Ë¹ç¤ï¤»¤Æ¥¯¥é¥¹¤òʬ³ä¤¹¤ë­¡


¡¡DiceRoller ¥¯¥é¥¹¤òÌò³ä¤Ë¹ç¤ï¤»¤Æ¥¯¥é¥¹¤òʬ³ä¤·¤¿Îã¤Ç¤¹¡£



DiceRollerInput.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




DiceRollerObserver.cs

<= ¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹¡£




¡¡DiceRollerInput¥¯¥é¥¹¤Ï¥µ¥¤¥³¥í¤ò¿¶¤ëÆþÎϤòôÅö¤·¡¢DiceRollerObserver¥¯¥é¥¹¤Ï¥µ¥¤¥³¥í¤Î·ë²Ì¤ò´Æ»ë¤¹¤ë½èÍý¤òôÅö¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤é¤Î¥¯¥é¥¹¤Ï¶¦Ä̤ΠdiceResult ÊÑ¿ô¤ò»ÈÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡DiceRollerInput¥¯¥é¥¹¤Ç¥¤¥Ù¥ó¥È¤ò¼õ¤±¼è¤ê¡¢diceResultÊÑ¿ô¤Ë·ë²Ì¤òÀßÄꤷ¤Æ¡¢
DiceRollerObserver¥¯¥é¥¹¤Ç¤Ï¡¢¤½¤Î diceResult ÊÑ¿ô¤ò´Æ»ë¤¹¤ë¤³¤È¤Ç¡¢
ʬ³ä¤µ¤ì¤¿¥¯¥é¥¹¤Ç¤â¥µ¥¤¥³¥í¤ò¿¶¤ë½èÍý¤¬Àµ¾ï¤ËÆ°ºî¤·¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤Ë¥¯¥é¥¹¤òʬ³ä¤¹¤ë¤³¤È¤Ç¡¢ÆþÎϤȴƻë½èÍý¤òÌÀ³Î¤Ë¶èÊ̤·¡¢¥³¡¼¥É¤Î²ÄÆÉÀ­¤äÊݼéÀ­¤¬¸þ¾å¤·¤Þ¤¹¡£


Ìò³ä¤Ë¹ç¤ï¤»¤Æ¥¯¥é¥¹¤òʬ³ä¤¹¤ë­¢

¡¡
¡¡Àè¤Û¤É¤Î DiceRoller ¥¯¥é¥¹¤ò¸«¤Ê¤¬¤é¡¢CardDealer ¥¯¥é¥¹¤ò¡¢Ìò³ä¤Ë¹ç¤ï¤»¤ÆÊ£¿ô¤Î¥¯¥é¥¹¤Ëʬ³ä¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£



¡¡¤½¤ì¤¬½ÐÍ褿¤é¡¢±þÍÑÊԤȤ·¤Æ¡¢¥«¡¼¥É¤ÎËç¿ô¤òÁý¤ä¤¹¤¿¤á¡¢string ·¿¤Ç¤Ï¤Ê¤¯ int ·¿¤Ç52Ëç¤Î¥«¡¼¥É(¥È¥é¥ó¥×¤òÌϤ·¤Æ)¤ò´ÉÍý¤·¤Æ¡¢ÍøÍѤ·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¤½¤·¤Æ¥«¡¼¥É¤ò°ú¤¯¤¿¤Ó¤Ë¤½¤ÎÈÖ¹æ¤Î¥«¡¼¥É¤òÈ´¤¤¤Æ¤¤¤­¡¢Æ±¤¸ÈÖ¹æ¤Ï°ú¤«¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£

¡¡¤³¤ÎÊýË¡¤ò¼ÂÁõ¤¹¤ë¤È¡¢½ÅÊ£¤·¤Ê¤¤ÈÖ¹æ¤Î¥«¡¼¥É¤¬1Ë示¤Ä»³»¥¤«¤é¸º¤Ã¤Æ¤¤¤­¡¢ºÇ¸å¤Ï°ú¤¯¥«¡¼¥É¤¬¤Ê¤¯¤Ê¤Ã¤Æ¥Ç¥Ã¥­¤Î»Ä¤êËç¿ô¤¬ 0 ¤Ë¤Ê¤ëµ¡Ç½¤¬¼ÂÁõ¤Ç¤­¤Þ¤¹¡£



¡¡¡ã±þÍÑÊÔ¡¡²óÅúÎã¡ä




¡¡°Ê¾å¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¼¡¤Ï ¥¤¥Ù¥ó¥È¶îÆ°·¿½èÍý¤ÎºîÀ®Îã­¢ ¤Ç¤¹¡£



»²¹Í¥µ¥¤¥È
Qiita @toRisouP ÍÍ
2022ǯ¸½ºß¤Ë¤ª¤±¤ëUniRx¤Î»È¤¤¤ß¤Á
Zenn Rinia ÍÍ
¿À·Ð¼Á¤¬À߷פˤ³¤À¤ï¤ê¤¹¤®¤¿¼ºÇÔÃÌ­¡¡¡ºÙʬ²½¤·¤¹¤®
note REALITY ³ô¼°²ñ¼Ò ÍÍ
Now in REALITY Tech #34 žÀ¸¤·¤¿¤éAndroid¥¨¥ó¥¸¥Ë¥¢¤À¤Ã¤¿·ï - ¸µUnity¥¨¥ó¥¸¥Ë¥¢¤Î»×¤¦¥²¡¼¥à¤È¥¢¥×¥ê¤Îµ»½ÑÎà»÷ÅÀ
slideshare Koji Morikawa ÍÍ
RPG¤Ë¤ª¤±¤ë¥¤¥Ø゙¥ó¥È¶îÆ°·¿¤ÎÀ߷פȼÂÁõ