Unity¤Ë´ØÏ¢¤¹¤ëµ­»ö¤Ç¤¹

¡¡Á°²ó¤Î¼ê½ç¤Ë¤Ä¤Å¤­¡¢¥½¡¼¥¹¥³¡¼¥É¤Îµ­Ë¡³Ø½¬¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤Á¤é¤ÏÃæ¾åµé¼Ô¸þ¤±¤ÎÆâÍƤˤʤäƤ¤¤Þ¤¹¡£

¡¡¥×¥í¥°¥é¥à¤Ë¤ª¤¤¤Æ¤Ï¡¢½èÍý¤Î·ë²Ì¤¬Æ±¤¸ÆâÍƤˤʤë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢µ­½Ò¤¹¤ë¥½¡¼¥¹¥³¡¼¥É¤ÎÆâÍƤ¬°Û¤Ê¤ë¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤³¤Ç¤Ï£±¤Ä¤ÎÌÜŪ(½èÍý¤Î·ë²Ì)¤ò¥Ù¡¼¥¹¤Ë¡¢°Û¤Ê¤ë¥½¡¼¥¹¥³¡¼¥É¤Îµ­Ë¡¤ò³Ø½¬¤·¤Þ¤¹¡£



ÌÜŪ


¡¡¥²¡¼¥àÆâ»þ´Ö¤ò·×¬¤·¡¢£±É䴤Ȥ˲èÌ̤Îɽ¼¨¤ò¹¹¿·¤¹¤ë

¡¡²èÌ̤Îɽ¼¨¤Ë¤Ä¤¤¤Æ¤ÏÊ̤μê½ç¤Ç¹Ô¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤³¤Ç¤Ï¡¢¥²¡¼¥àÆâ»þ´Ö¤Î·×¬¤Î»ÅÊý¤Ë¤Ä¤¤¤Æ
ÍÍ¡¹¤Ê¥½¡¼¥¹¥³¡¼¥É¤Îµ­Ë¡¤ò¾Ò²ð¤·¤Þ¤¹¡£

¡¡¤¤¤º¤ì¤Îµ­Ë¡¤Ë¤ª¤¤¤Æ¤â¡¢½èÍýÆâ¤Ë¤Ï Debug.Log ¥á¥½¥Ã¥É¤òÍѤ¤¤Æ¡¢Console ¥Ó¥å¡¼¤Ë¤Æ»þ´Ö¤¬Àµ¾ï¤Ë·×¬¤Ç¤­¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Þ¤¹¡£


¡ã¼Â¹Ô»þ¤Î½èÍý¤Î³Îǧ¡ä



¡¡³Æ¥½¡¼¥¹¥³¡¼¥É¤òµ­½Ò¤·¤¿¤é¡¢É¬¤º¥Ç¥Ð¥Ã¥°¤ò¹Ô¤¤¤Þ¤¹¡£
¾åµ­¤Î¤è¤¦¤Ë Console ¥Ó¥å¡¼¤Ë Debug.Log ¥á¥½¥Ã¥É¤Î¼Â¹Ô·ë²Ì¤¬É½¼¨¤µ¤ì¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£


µ­Ë¡£³¡¡¡¼UniRx ¤Î³èÍÑ¡¼


¡¡£´¤Ä¤ÎÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤½¤Î¤¦¤Á¤Î£±¡Á£³¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤¤¤º¤ì¤â¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤òÍøÍѤ·¤¿½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£


£±¡¥Observable.EveryUpdate ¥á¥½¥Ã¥É


¡¡Observable.EveryUpdate ¤Ï UniRx ¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤Ç¤¹¡£
¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤È¤Ï¡¢Subject ¤òÍÑ°Õ¤·¤Ê¤¯¤Æ¤â Observable ¤òÀ¸À®¤·¤ÆÍøÍѤǤ­¤ë static ¥á¥½¥Ã¥É·²¤Î¤³¤È¤Ç¤¹¡£
ÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢UniRx ¤ÎÀë¸À¤Ë²Ã¤¨¤Æ¡¢Observable ¥¯¥é¥¹¤òµ­½Ò¤¹¤ë¤³¤È¤Ç¡¢¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤ò¼Â¹Ô¤Ç¤­¤Þ¤¹¡£

¡¡Observable.EveryUpdate ¥á¥½¥Ã¥É¤Ï¡¢MonoBehaviour ¤Î Update ¥á¥½¥Ã¥É¤ò Observable ¤ËÊÑ´¹¤·¤ÆÍøÍѤǤ­¤Þ¤¹¡£
¤³¤³¤Ç¤Ï¤½¤Îµ¡Ç½¤òÍøÍѤ·¤Æ½èÍý¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£


TimeSample_4.cs



¡ãObservable.Every ¡Á ¥á¥½¥Ã¥É·²¤Îα°ÕÅÀ¡ä


¡¡¤Ê¤ª Observable.EveryUpdate ¤Ë¤ÏƱÍÍ¤Ë Observable.Every ¡Á ¤Ç»Ï¤Þ¤ë¥á¥½¥Ã¥É¤¬¤¤¤¯¤Ä¤«ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤é¤Î Observable ¤Ï¤¤¤º¤ì¤â OnCompleted ¤Ë¤è¤ë¥á¥Ã¥»¡¼¥¸¤Îȯ¹Ô¤ò¹Ô¤¤¤Þ¤»¤ó¡£¤½¤Î¤¿¤á¡¢Dispose ¤ò˺¤ì¤º¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
(˺¤ì¤Æ¤·¤Þ¤¦¤È¡¢Î¢Â¦¤Ç¤º¤Ã¤È½èÍý¤¬¼Â¹Ô¤µ¤ì³¤±¤Æ¤·¤Þ¤¤¡¢¥á¥â¥ê¥ê¡¼¥¯¤ò°ú¤­µ¯¤³¤¹¸¶°ø¤Ë¤Ê¤ê¤Þ¤¹¡£)

¡¡º£²ó¤Ï AddTo() ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î OnDestroy ¤Î¥¿¥¤¥ß¥ó¥°¤ËϢư¤·¤Æ Dispose ¤ò¹Ô¤¤¡¢¹ØÆɽèÍý¤òÄä»ß¤·¤Æ¤¤¤Þ¤¹¡£

¡¡°Ê²¼¤ÎÆ°²è¤Ï¡¢OnCompleted ¤Ë¤è¤ë¥á¥Ã¥»¡¼¥¸¤Îȯ¹Ô¤ò¹Ô¤ï¤Ê¤¤ Observable.EveryUpdate ¤Î¹ØÆɽèÍý¤Ë¤ª¤¤¤Æ¡¢
AddTo ¥á¥½¥Ã¥É¤òµ­½Ò¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤È¡¢µ­½Ò¤·¤¿¾ì¹ç¤Î½èÍý¤Î°ã¤¤¤Ç¤¹¡£

¡¡¥²¡¼¥à¼Â¹ÔÃæ¤Ë Observable.EveryUpdate ¤Î½èÍý¤¬½ñ¤¤¤Æ¤¢¤ë¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºï½ü¤·¤¿¤È¤­¤Ë¡¢
¹ØÆɤνèÍý¤¬Ää»ß¤¹¤ë¤«¡¢Ää»ß¤»¤º¤ËÆ°¤­Â³¤±¤Æ¤·¤Þ¤¦¤«¤ò¥Ç¥Ð¥Ã¥°¤·¤Æ³Îǧ¤·¤Æ¤¤¤Þ¤¹¡£


¡ãAddTo ¥á¥½¥Ã¥É¤òµ­½Ò¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºï½ü¤·¤¿¥±¡¼¥¹¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯

¡¡¢ª¡¡¤¹¤Ç¤Ë¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ºï½ü¤µ¤ì¤Æ¤¤¤ë¤Ë¤â´Ø¤ï¤é¤º¡¢Observable.EveryUpdate ¤Î¹ØÆɽèÍý¤¬Ää»ß¤·¤Þ¤»¤ó¡£
¡¡¡¡¡¡¤³¤ì¤¬¥á¥â¥ê¥ê¡¼¥¯¤Î¸¶°ø¤Î£±¤Ä¤Ë¤Ê¤ê¤Þ¤¹¡£



¡ãAddTo ¥á¥½¥Ã¥É¤òµ­½Ò¤·¤¿¾ì¹ç¤Ë¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºï½ü¤·¤¿¥±¡¼¥¹¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯

¡¡¢ª¡¡¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Îºï½ü¤Ë¹ç¤ï¤»¤Æ AddTo ¥á¥½¥Ã¥É¤¬ Dispose ¤ò¹Ô¤¤¡¢Observable.EveryUpdate ¤Î¹ØÆɽèÍý¤¬Ää»ß¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¡¡¡¡¤³¤ì¤¬Àµ¤·¤¤½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡¤³¤Î¤è¤¦¤Ë¼ÂºÝ¤Ë¼«Ê¬¤Î¥×¥í¥¸¥§¥¯¥È¤Ç¤â½èÍý¤òµ­½Ò¤·¤¿¤ê¡¢¥³¥á¥ó¥È¥¢¥¦¥È¤·¤¿¤ê¤·¤Æ¡¢¹ØÆɤÎÄä»ß½èÍý¤Ë¤É¤Î¤è¤¦¤Ê°ã¤¤¤¬È¯À¸¤¹¤ë¤«¤ò³Îǧ¤·¤Æ¤ª¤¯¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£
Æä˵­»ö¤òÆɤ߲ò¤¤¤¿¤À¤±¤Ç¤Ï½èÍý¤ÎÆâÍƤò¶ñ¸½²½¤·¤Æ¥¤¥á¡¼¥¸¤¹¤ë¤³¤È¤¬Æñ¤·¤¤¤Î¤Ç¡¢¼ÂºÝ¤Ë¼«Ê¬¤Ç»î¤·¤ÆÂ賤¹¤ë¤³¤È¤¬¥×¥í¥°¥é¥à¤Ë¤ª¤¤¤Æ¤Ï¥¹¥­¥ë¥¢¥Ã¥×¤Ë¤Ä¤Ê¤¬¤ê¤Þ¤¹¡£

¡¡¾ï¤Ë¤½¤¦¤¤¤Ã¤¿¥¹¥¿¥ó¥¹¤Ç¤Î³Ø½¬¤ò¿´³Ý¤±¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£


£²¡¥Observable.Interval ¥á¥½¥Ã¥É


¡¡Observable.Interval ¤â¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤Î£±¤Ä¤Ç¤¹¡£(Observable ¥¯¥é¥¹¤ÎÀë¸À¤«¤é½èÍý¤¬»Ï¤Þ¤ê¤Þ¤¹)

¡¡Observable.Interval ¥á¥½¥Ã¥É¤Ï¡¢Âè1°ú¿ô¤Ë»ØÄꤷ¤¿Ãͤò»þ´Ö¤Î´Ö³Ö¤È¤·¤Æ¡¢Ìµ¸Â¤Ë¥á¥Ã¥»¡¼¥¸¤òȯ¹Ô¤·¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤Ï OnCompleted ¥á¥Ã¥»¡¼¥¸¤Îȯ¹Ô¤ò¹Ô¤¤¤Þ¤»¤ó¤Î¤Ç¡¢¹ØÆɤòÄä»ß¤µ¤»¤ë¤¿¤á¤Ë¤Ï»ß¤á¤¿¤¤¥¿¥¤¥ß¥ó¥°¤Ç Dispose ¤ò¹Ô¤¦¤«¡¢
AddTo ¥á¥½¥Ã¥É¤Ê¤É¤Ë¤è¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤ËɳÉÕ¤±¤Æ¡¢¹ØÆɤÎÄä»ß½èÍý¤òµ­½Ò¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


TimeSample_5.cs


¡¡¾åµ­¤Î¤è¤¦¤Ë Interval ¥á¥½¥Ã¥ÉÆâ¤ÎÂè1°ú¿ô¤Î»ØÄê(System.TimeSpan ·¿)¤ò1Éä˻ØÄê(FromSeconds(1))¤¹¤ë¤³¤È¤Ç¡¢
1Éôֳ֤ǥá¥Ã¥»¡¼¥¸¤òȯ¹Ô¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢Debug.Log ¥á¥½¥Ã¥É¤â1É䴤Ȥ˼¹Ԥµ¤ì¤Þ¤¹¡£

¡¡Interval ¥á¥½¥Ã¥É¤Ï Subscribe ¤·¤¿¥¿¥¤¥ß¥ó¥°¤«¤é·×¬¤¬»Ï¤Þ¤ê¤Þ¤¹¤Î¤Ç¡¢ºÇ½é¤Ë1ÉÃÂԤäƤ«¤é¡¢1Éôֳ֤ǤΥá¥Ã¥»¡¼¥¸È¯¹Ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤áÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¤½¤ì¤ò²ÃÌ£¤·¤¿¾å¤Ç½èÍý¤ò¹½ÃÛ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Debug.Log ¥á¥½¥Ã¥É¤Îµ­½Ò¤â¾¤Î¤â¤Î¤È°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡Subscribe ¤·¤¿¤È¤­¤Ë¤Ï long ·¿¤ÎÃͤ¬È¯¹Ô¤µ¤ì¤Þ¤¹¡£Ãͤˤϥá¥Ã¥»¡¼¥¸¤òȯ¹Ô¤·¤¿Î߷׿ô¤¬ÂåÆþ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¾åµ­¤Î½èÍý¤Ç¤¢¤ì¤Ð¡¢x ¤ÎÃÍ¤Ï long ·¿¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢¥á¥Ã¥»¡¼¥¸¤òȯ¹Ô¤µ¤ì¤ë¤¿¤Ó¤Ë¡¢0¡¢1¡¢2 ¤È x ¤ÎÃͤ¬²Ã»»¤µ¤ì¤Æ¤¤¤Þ¤¹¡£


£³¡¥Observable.Timer ¥á¥½¥Ã¥É


¡¡Observable.Timer ¤â¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤Î£±¤Ä¤Ç¤¹¡£(Observable ¥¯¥é¥¹¤ÎÀë¸À¤«¤é½èÍý¤¬»Ï¤Þ¤ê¤Þ¤¹)

¡¡Observable.Timer ¥á¥½¥Ã¥É¤È Observable.Interval ¥á¥½¥Ã¥É¤Ï»÷¤Æ¤¤¤Þ¤¹¤¬¡¢
¤³¤Á¤é¤ÎÊý¤Ï TimeSpan ·¿¤Î°ú¿ô¤ò£±¤Ä¡¢¤¢¤ë¤¤¤Ï£²¤Ä¤Î¤¤¤º¤ì¤«¤Ç»ØÄê²Äǽ¤Ç¤¢¤ê¡¢½èÍý¤ÎÆ°¤­¤¬ÊѤï¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤è¤ê¤¬½ÀÆð¤Ê½èÍý¤¬µ­½Ò½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡Âè1°ú¿ô(System.TimeSpan ·¿)¤Ë»ØÄꤷ¤¿»þ´Ö¤òÂÔµ¡»þ´Ö¤È¤·¤ÆÍøÍѤ·¤Þ¤¹¡£System.TimeSpan.Zero ¤Èµ­½Ò¤¹¤ì¤Ð¡¢ÂÔµ¡»þ´Ö¤Ï¤Ê¤·¤Ë¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¤È¤­¡¢Âè2°ú¿ô¤Î»ØÄ꤬¤Ê¤±¤ì¤Ð¡¢¤½¤Î»þÅÀ¤Ç½èÍý¤Ï½ªÎ»¤·¡¢OnCompleted ¥á¥Ã¥»¡¼¥¸¤¬È¯¹Ô¤µ¤ì¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢ÂÔµ¡»þ´Ö¤Î·Ð²á¤ò¤Þ¤Ã¤Æ¡¢1ÅÙ¤À¤±½èÍý¤ò¹Ô¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£(·«¤êÊÖ¤·¤Þ¤»¤ó¡£)

¡¡Âè2°ú¿ô(¤³¤Á¤é¤â System.TimeSpan ·¿)¤òÍøÍѤ¹¤ë¾ì¹ç¡¢Âè1°ú¿ô¤Ë»ØÄꤷ¤¿ÂÔµ¡»þ´Ö¸å¤Ë¡¢»ØÄꤷ¤¿»þ´Ö¤Î´Ö³Ö¤Ç¥á¥Ã¥»¡¼¥¸¤òȯ¹Ô¤·¤Þ¤¹¡£
Âè2°ú¿ô¤òµ­½Ò¤·¤Æ¤¤¤ë¾ì¹ç¡¢¤³¤Î»þ´Ö¤Î´Ö³Ö¤Ç̵¸Â¤Ë½èÍý¤ò·«¤êÊÖ¤·¡¢OnNext ¥á¥Ã¥»¡¼¥¸¤¬È¯¹Ô¤µ¤ì¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢Âè2°ú¿ô¤Þ¤Çµ­½Ò¤¹¤ë¤È¡¢¤½¤ì¤Ï Interval ¤ÎÂè1°ú¿ô¤ÈƱ¤¸µ¡Ç½¤Ë¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¾ì¹ç¡¢OnCompleted ¥á¥Ã¥»¡¼¥¸¤¬È¯¹Ô¤µ¤ì¤Þ¤»¤ó¤Î¤Ç¡¢Âè2°ú¿ô¤Þ¤Çµ­½Ò¤·¤¿¾ì¹ç¤Ë¤Ï¡¢Observable.Interval ¤ÈƱ¤¸¤è¤¦¤Ë Dispose ¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£


TimeSample_6.cs



¡ãObservable.Interval ¤È Observable.Timer ¤Î°ã¤¤¤È¶¦Ä̤ÎÃí°ÕÅÀ¡ä


¡¡Interval ¤È Timer ¤òÍøÍѤ·¤Æ·«¤êÊÖ¤·¤Î½èÍý¤ò¹Ô¤¦¾ì¹ç¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¤òȯ¹Ô¤¹¤ë¥¿¥¤¥ß¥ó¥°¤¬°Û¤Ê¤ë¤³¤È¤¬¥Ý¥¤¥ó¥È¤Ç¤¹¡£

¡¡¶¦Ä̤ÎÃí°ÕÅÀ¤È¤·¤Æ¤Ï¡¢Interval ¤È¡¢¾åµ­¤Î¤è¤¦¤Ë Timer ¤ËÂè2°ú¿ô¤Þ¤Çµ­½Ò¤·¤¿¾ì¹ç¡¢¤É¤Á¤é¤â̵¸Â¤Ë·«¤êÊÖ¤¹¤Î¤Ç¡¢OnCompleted ¥á¥Ã¥»¡¼¥¸¤¬È¯¹Ô¤µ¤ì¤Þ¤»¤ó¡£
¤è¤Ã¤Æ¼êÆ°¤Ç Dispose ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ò˺¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡AddTo ¥á¥½¥Ã¥É¤òÍøÍѤǤ­¤Þ¤¹¤Î¤Ç¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ç¹ØÆɤòÄä»ß¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ Dispose ¤¹¤ë¤Î¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£


£´¡¥UpdateAsObservable ¥á¥½¥Ã¥É


¡¡¤³¤Á¤é¤Ï ObservableTriggers ¤Ë´Þ¤Þ¤ì¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£
namespace ¤È¤·¤Æ¤Ï UniRx ¤À¤±¤Ç¤Ï¤Ê¤¯¡¢using ¤Ë UniRx.Triggers ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¡ObservableTriggers ¤Ï¡¢Unity ¤ÎÍÑ°Õ¤·¤Æ¤¤¤ë¥¤¥Ù¥ó¥È´Ø¿ô¤ò Observable ¤È¤·¤Æ°·¤¨¤ë¤è¤¦¤Ë¤¹¤ëµ¡Ç½¤Ç¤¹¡£
GameObject ·¿¤Ë´ØÏ¢¤·¤¿¥¤¥Ù¥ó¥È´Ø¿ô¤ò¸µ¤Ë¤·¤¿¥á¥½¥Ã¥É¤¬Â¿¿ôÍÑ°Õ¤µ¤ì¤Æ¤ª¤ê¡¢
¤½¤ÎÃæ¤Î£±¤Ä¤Ë Update ¥á¥½¥Ã¥É¤ò Observable ¤È¤·¤ÆÍøÍѤǤ­¤ë UpdateAsObservable ¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤Á¤é¤Ï¡Ú£±¡¥Observable.EveryUpdate¡Û¤ÈƱ¤¸¤è¤¦¤ËÍøÍѤ·¤Þ¤¹¤¬¡¢UpdateAsObservable ¥á¥½¥Ã¥É¤Ë¤Ï OnCompleted ¤Ë¤è¤ë¥á¥Ã¥»¡¼¥¸¤Îȯ¹Ô¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢AddTo ¥á¥½¥Ã¥É¤Ê¤É¤Ë¤è¤ë Dispose ¤Î½èÍý¤Ïµ­½ÒÉÔÍפǤ¹¡£(½ñ¤­Ëº¤ì¤Ë¤è¤ë Dispose ϳ¤ì¤Î¿´ÇÛ¤¬¤¢¤ê¤Þ¤»¤ó¡£)


TimeSample_7.cs



¡ãObservable.EveryUpdate ¤È UpdateAsObservable ¤Î°ã¤¤¡ä


¡¡Observable.EveryUpdate ¤È UpdateAsObservable ¤Ï¤É¤Á¤é¤â Update ¥á¥½¥Ã¥É¤ò Observable ²½(ÊÑ´¹)¤·¤¿¤â¤Î¤Ç¤¹¤¬¡¢Â¿¤¯¤ÎÉôʬ¤Ç°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£
Æä˽ÅÍפÊÉôʬ¤È¤·¤Æ¤Ï¡¢°Ê²¼¤Î¤è¤¦¤ÊÉôʬ¤Ç¤¹¡£
Observable.EveryUpdate
UpdateAsObservable
£±¡¥¥á¥Ã¥»¡¼¥¸¤Î¥Ç¡¼¥¿·¿longUnit
£²¡¥OnCompleted ¥á¥Ã¥»¡¼¥¸È¯¹Ô¤µ¤ì¤Ê¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ»þ¤Ëȯ¹Ô¤µ¤ì¤ë
£³¡¥¥¤¥Ù¥ó¥È´Ø¿ô¤Î Observable ÊÑ´¹¥°¥í¡¼¥Ð¥ë¤Ê¥¤¥Ù¥ó¥ÈGameObject ¤Ë´ØÏ¢¤·¤¿¥¤¥Ù¥ó¥È

¡¡Â¾¤Ë¤â¡¢Observabe ¤ò´ÉÍý¤¹¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ã¤¤¤ä¡¢¥¤¥Ù¥ó¥Èȯ¹Ô¤Î¥¿¥¤¥ß¥ó¥°¤Î°ã¤¤¤Ê¤É¤â¤¢¤ê¤Þ¤¹¡£
Observable.EveryUpdate ¤ÏÆÃÄê¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ëɳ¤Å¤«¤Ê¤¯¤Æ¤âÍøÍѤǤ­¤Þ¤¹(MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¥¯¥é¥¹¤Ç¤âÍøÍѤǤ­¤ë)¤¬¡¢
UpdateAsObservable ¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î Component(MonoBehaviour)¤Ëɳ¤Å¤­¡¢¤½¤Î Update ¥á¥½¥Ã¥É¤Î¥¿¥¤¥ß¥ó¥°¤Ç¥¤¥Ù¥ó¥È¤òȯ¹Ô¤·¤Þ¤¹¡£

¡¡²¼µ­¤Î¥µ¥¤¥È¤Ë¾ÜºÙÀâÌÀ¤¬ºÜ¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤ì¤¾¤ì¤Î¥á¥ê¥Ã¥È¡¦¥Ç¥á¥ê¥Ã¥È¡¢ÍøÍѤ¹¤ë¥±¡¼¥¹¤Ê¤É¤ò³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


¡ã»²¹Í¥µ¥¤¥È¡ä
Qiita @toRisouP(³ô¼°²ñ¼Ò ¥Ð¡¼¥Á¥ã¥ë¥­¥ã¥¹¥È) ÍÍ
UniRxÆþÌç ¤½¤Î4 -Update¤ò¥¹¥È¥ê¡¼¥à¤ËÊÑ´¹¤¹¤ëÊýË¡¤È¥á¥ê¥Ã¥È-



µ­Ë¡£´¡¡¡¼UniTask ¤Î³èÍÑ¡¼


¡¡UniTask ¤òÍøÍѤ·¤¿½èÍý¤Î¥±¡¼¥¹¤Ë¤Ä¤¤¤Æ¡¢£²¤ÄÄ󼨤·¤Þ¤¹¡£

¡¡¤É¤Á¤é¤â UniTask ¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤ò³èÍѤ·¡¢async / await ¤Îµ¡Ç½¤òÍøÍѤ·¤Æ»þ´Ö¤Î·×¬½èÍý¤ò¹Ô¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤½¤Î¾ì¹ç¡¢ÈóƱ´ü½èÍý¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë¤Ï ¡Á Async ¤Èµ­½Ò¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£


¡ã£±¡¥UniTask.Delay ¥á¥½¥Ã¥É¡ä


¡¡UniTask.Delay ¥á¥½¥Ã¥É¤òÍøÍѤ·¤¿¥±¡¼¥¹¤Ç¤¹¡£
°ú¿ô¤Ë¤Ï£´¼ïÎà¤Î¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢º£²ó¤ÏÂè1°ú¿ô¤Ë int ·¿¤òÍøÍѤ·¤¿¥±¡¼¥¹¤ÇÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤³¤ì¤Ï millseconds ñ°Ì¤ÇÃͤò»ØÄê¤Ç¤­¤Þ¤¹¡£º£²ó¤Ï 1000 millseconds ¤È¤¹¤ë¤³¤È¤Ç 1Éäò»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î¤È¤­¡¢½é´üÃͤΤ¢¤ëÃͤϤ½¤Î¤Þ¤ÞÍøÍѤ·¡¢ÆÃÄê¤Î½é´üÃͤÀ¤±¤ò¾å½ñ¤­¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢
¡Ú½é´üÃͤÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ëÊÑ¿ô̾ : Ãۤ͡ȵ­½Ò¤¹¤ë¤³¤È¤Ç¡¢»ØÄꤷ¤¿½é´üÃͤΤߤò¾å½ñ¤­¤·¤ÆÍøÍѤ¹¤ë¤³¤È¤¬¤Ç¤­¤ë¥Æ¥¯¥Ë¥Ã¥¯¤¬¤¢¤ê¤Þ¤¹¡£

¡¡º£²ó¤ÏÂè2¡¢Âè3°ú¿ô¤Ï½é´üÃͤòÍøÍѤ·¡¢Âè4°ú¿ô¤Î¤ß¤ò¾å½ñ¤­¤·¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£


TimeSample_8.cs



¡ã½é´üÃͤΤ¢¤ë°ú¿ô¤ò¤½¤Î¤Þ¤ÞÍøÍѤ·¡¢ÆÃÄê¤Î°ú¿ô¤À¤±¤ò¾å½ñ¤­¤·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¡ä


¡¡Delay ¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë¤Ï£´¼ïÎà¤Î¥ª¡¼¥Ð¡¼¥í¡¼¥É¤¬¤¢¤ê¡¢¤¤¤º¤ì¤â¡¢Âè2¡ÁÂè4°ú¿ô¤Ë¤Ï½é´üÃͤ¬ÂåÆþ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
º£²óÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ï¡¢Âè1°ú¿ô¤«¤é½çÈ֤ˡ¢int ·¿¡¢bool ·¿¡¢PlayerLoopTiming ·¿¡¢CancellationToken ·¿¤Î¤â¤Î¤Ç¤¹¡£
¤³¤³¤Ç¤ÏÍøÍѤ·¤Æ¤¤¤ëÄêµÁ¤Î¤ßµ­½Ò¤·¤Æ¤ª¤­¤Þ¤¹(¤è¤Ã¤Æ°ú¿ô¤Î»ØÄ꤬°ã¤¦Æ±Ì¾¤Î Delay ¥á¥½¥Ã¥É¤¬¡¢Â¾¤Ë£³¼ïÎढ¤ê¤Þ¤¹)¡£


¡ãDelay ¥á¥½¥Ã¥É¤ÎÄêµÁ¡ä
public static UniTask Delay(
    int millisecondsDelay,
    bool ignoreTimeScale = false,
    PlayerLoopTiming delayTiming = PlayerLoopTiming.Update,
    CancellationToken cancellationToken = default(CancellationToken))

¡¡Âè2¡ÁÂè4°ú¿ô¤Ë¤Ï½é´üÃͤ¬¤¢¤ë¤¿¤á¡¢Âè1°ú¿ô¤Î¤ß»ØÄꤹ¤ì¤Ð½èÍý¤Ï¥¨¥é¡¼¤Ê¤¯µ­½Ò½ÐÍè¤Þ¤¹¡£

¡ãÂè1°ú¿ô¤Î¤ß»ØÄê¡ä
¡¡// 1ÉÃÂÔµ¡
  await UniTask.Delay(1000);



¡¡¤Þ¤¿¡¢¤¹¤Ù¤Æ¤Î½é´üÃͤò¾å½ñ¤­¤·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¡¢¤¢¤ë¤¤¤Ï½é´üÃͤÈƱ¤¸Ãͤò»ØÄꤷ¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡ã¤¹¤Ù¤Æ¤Î°ú¿ô¤òµ­½Ò¤¹¤ë¾ì¹ç¡ä
¡¡// 1ÉÃÂÔµ¡
  await UniTask.Delay(1000, false, PlayerLoopTiming.Update, token);¡¡¡¡¡¡// Âè1°ú¿ô¡ÁÂè4°ú¿ô¤Þ¤Ç¤ò»ØÄꤷ¤Æ¤¤¤ë¡£



¡¡ºÇ¸å¤Ë¡¢º£²ó³èÍѤ·¤Æ¤¤¤ë¡¢½é´üÃͤϤ½¤Î¤Þ¤ÞÍøÍѤ·¤Ä¤Ä¡¢ÆÃÄê¤Î½é´üÃͤÀ¤±¤ò¾å½ñ¤­¤·¤ÆÍøÍѤ·¤¿¤¤¥±¡¼¥¹¤Ç¤¹¡£
¤½¤Î¾ì¹ç¡¢ÄêµÁ¤ÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ëÊÑ¿ô̾¤ÈÃͤòµ­½Ò¤·¤Þ¤¹¡£


¡ã½é´üÃͤΤ¢¤ë°ú¿ô¤ò¤½¤Î¤Þ¤ÞÍøÍѤ·¡¢ÆÃÄê¤Î°ú¿ô¤À¤±¤ò¾å½ñ¤­¤·¤ÆÍøÍѤ·¤¿¤¤¾ì¹ç¡ä
¡¡// 1ÉÃÂÔµ¡
  await UniTask.Delay(1000, cancellationToken: token);¡¡¡¡¡¡// Âè1°ú¿ô¤È¡¢Âè4°ú¿ô¤ò»ØÄꤷ¤Æ¤¤¤ë¡£Âè2¡¢Âè3°ú¿ô¤Ï½é´üÃͤòÍøÍÑ¡£

¡¡½é´üÃͤΤ¢¤ë°ú¿ô¤Îµ­½Ò¤ò¾Êά¤·¤Ä¤Ä¡¢ÆÃÄê¤Î°ú¿ô¤À¤±¤ò³èÍѤ·¤¿¤¤¾ì¹ç¤ËÍøÍѤǤ­¤ëµ­½Ò¥Æ¥¯¥Ë¥Ã¥¯¤Ë¤Ê¤ê¤Þ¤¹¡£
°ú¿ô¤Î¿ô¤¬Â¿¤¤¥á¥½¥Ã¥É¤Î¾ì¹ç¤ËÌòΩ¤Ä¼êË¡¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡ÆÃ¤Ë UniTask ¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¯¥È¥ê¥á¥½¥Ã¥É¤Ë¤Ï¥­¥ã¥ó¥»¥ëÍѤΠCancellationToken ¤¬»ØÄê¤Ç¤­¤Þ¤¹¤Î¤Ç
¤³¤Á¤é¤Ï˺¤ì¤º¤Ëµ­½Ò¤·¡¢¥­¥ã¥ó¥»¥ë½èÍý¤ËÈ÷¤¨¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£


¡ã£²¡¥UniTask.Yield ¥á¥½¥Ã¥É¤òÍøÍѤ·¤¿¡¢¥³¥ë¡¼¥Á¥ó¤Î yield return null ¤ÎÂåÂؽèÍý¡ä


¡¡UniTask.Yield ¥á¥½¥Ã¥É¤ò³èÍѤ·¡¢¼Â¹Ô¥³¥ó¥Æ¥­¥¹¥È(¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ëºÝ¤Î¾õ¶·)¤ò PlayerLoopTiming.Update ¤Ë»ØÄꤷ¤Æ await ¤¹¤ë¤³¤È¤Ç¡¢
¥³¥ë¡¼¥Á¥ó¤Î yield return null ¤ÈƱ¤¸¤è¤¦¤Ë¡¢1¥Õ¥ì¡¼¥àÂÔµ¡¤Î½èÍý¤òºî¤ê½Ð¤¹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£


TimeSample_9.cs


¡¡Yield ¥á¥½¥Ã¥É¤Ë¤Ï°ú¿ô¤Î¥ª¡¼¥Ð¡¼¥í¡¼¥Éµ¡Ç½¤¬¤¢¤ê¡¢»ØÄê¤Ê¤·¤Ç¤Îµ­½Ò¤â²Äǽ¤Ç¤¹¡£(¼Â¹Ô¥³¥ó¥Æ¥­¥¹¥È¤Î»ØÄê½é´üÃͤ¬¤¢¤ê¤Þ¤¹¡£)
¡¡
¡¡Âè1°ú¿ô¤Ë¤Ï¼Â¹Ô¥³¥ó¥Æ¥­¥¹¥È¤Î¥¿¥¤¥ß¥ó¥°¤ò»ØÄꤷ¤Æ¡¢¥¿¥¤¥ß¥ó¥°¤òÀÚ¤êÂؤ¨¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
Î㤨¤Ð¡¢Update ¤«¤é FixedUpdate ¤Î¥¿¥¤¥ß¥ó¥°¤ËÊѹ¹¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£

  await UniTask.Yield(PlayerLoopTiming.Update, token);
  
  Debug.Log(Time.frameCount);

  await UniTask.Yield(PlayerLoopTiming.FixedUpdate, token);

¡¡Âè2°ú¿ô¤Ï CancellationToken ·¿¤Ç¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤Á¤é¤Ïɬ¤º»ØÄꤹ¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£


½ª¤ï¤ê¤Ë


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

¡¡£±¤Ä¤ÎÌÜŪ(1Éäò·×¬¤¹¤ë)¤ËÂФ·¤Æ¡¢¿§¡¹¤Ê½èÍý¤Î¼ÂÁõ¥Ñ¥¿¡¼¥ó¤¬¤¢¤ë¤³¤È¤¬¸«¤¨¤Æ¤¯¤ë¤È»×¤¤¤Þ¤¹¡£
¤³¤ì¤é¤ò³Ð¤¨¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥í¥¸¥Ã¥¯¤ò¹Í¤¨¤ë¤È¤­¡¢½èÍý¤ò¹½ÃÛ¤¹¤ëºÝ¤Î¥½¡¼¥¹¥³¡¼¥É¤Îµ­½Ò¤Î°ú¤­½Ð¤·¤òÁý¤ä¤¹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¥±¡¼¥¹¤Ë±þ¤¸¤Æ»È¤¤Ê¬¤±¤é¤ì¤ë¤è¤¦¤Ë¡¢Àß·×ÎÏ¡¢¼ÂÁõÎϤòÍܤäƤ¤¤­¤Þ¤·¤ç¤¦¡£

¡¡¼ÂÁõ¤Ë¤¢¤¿¤ê¡¢¤É¤ó¤ÊÊýË¡¤¬¤¢¤ë¤Î¤«¤ò¾ï¤Ë¹Í¤¨¤Æ»ëÌî¤ò¹­¤¯¤â¤Ä¤è¤¦¤Ë¤¹¤ë¤³¤È¤âÂçÀڤˤʤê¤Þ¤¹¡£

¥³¥á¥ó¥È¤ò¤«¤¯


¡Öhttp://¡×¤ò´Þ¤àÅê¹Æ¤Ï¶Ø»ß¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

ÍøÍѵ¬Ìó¤ò¤´³Îǧ¤Î¤¦¤¨¤´µ­Æþ²¼¤µ¤¤

Menu



´ðÁÃ

µ»½Ñ/Ãμ±(¼ÂÁõÎã)

3D¥¢¥¯¥·¥ç¥ó¥²¡¼¥à

2D¤ª¤Ï¤¸¤­¥²¡¼¥à(ȯŸÊÔ)

2D¶¯À©²£¥¹¥¯¥í¡¼¥ë¥¢¥¯¥·¥ç¥ó(ȯŸÊÔ)

2D¥¿¥Ã¥×¥·¥å¡¼¥Æ¥£¥ó¥°(³ÈÄ¥ÊÔ)

¥ì¡¼¥¹¥²¡¼¥à(È´¿è)

2DÊüÃÖ¥²¡¼¥à(ȯŸÊÔ)

3D¥ì¡¼¥ë¥¬¥ó¥·¥å¡¼¥Æ¥£¥ó¥°(±þÍÑÊÔ)

3Dæ½Ð¥²¡¼¥à(È´¿è)

2D¥ê¥¢¥ë¥¿¥¤¥à¥¹¥È¥é¥Æ¥¸¡¼

3D¥¿¥Ã¥×¥¢¥¯¥·¥ç¥ó(NavMeshAgent »ÈÍÑ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥«¥¨¥ë¤Î°Ù¤Ë¡Á¡¢¥Ü¥³¥¹¥«¥¦¥©¡¼¥ºÉ÷)

VideoPlayer ¥¤¥Ù¥ó¥ÈϢư¤Î¼ÂÁõÎã

VideoPlayer ¥ê¥¹¥ÈÆ⤫¤é¥à¡¼¥Ó¡¼ºÆÀ¸¤Î¼ÂÁõÎã(ȯŸ)

AR ²èÁüÉÕ¤­¥ª¥Ö¥¸¥§¥¯¥ÈÀ¸À®¤Î¼ÂÁõÎã

AR ¥ê¥¹¥ÈÆ⤫¤éÀ¸À®¤Î¼ÂÁõÎã(ȯŸ)

2D¥È¥Ã¥×¥Ó¥å¡¼¥¢¥¯¥·¥ç¥ó(¥µ¥Ð¥¤¥Ð¡¼É÷)

private



¤³¤Î¥µ¥¤¥ÈÆâ¤ÎºîÉʤϥæ¥Ë¥Æ¥£¤Á¤ã¤ó¥é¥¤¥»¥ó¥¹¾ò¹à¤Î¸µ¤ËÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£

´ÉÍý¿Í/Éû´ÉÍý¿Í¤Î¤ßÊÔ½¸¤Ç¤­¤Þ¤¹