ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ03·î06Æü(·î) 16:04:51ÍúÎò
¡¡¥×¥í¥°¥é¥à¤Ë¤ª¤¤¤Æ¤Ï¡¢½èÍý¤Î·ë²Ì¤¬Æ±¤¸ÆâÍƤˤʤë¾ì¹ç¤Ç¤¢¤Ã¤Æ¤â¡¢µ½Ò¤¹¤ë¥½¡¼¥¹¥³¡¼¥É¤ÎÆâÍƤ¬°Û¤Ê¤ë¥±¡¼¥¹¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤³¤Ç¤Ï£±¤Ä¤ÎÌÜŪ(½èÍý¤Î·ë²Ì)¤ò¥Ù¡¼¥¹¤Ë¡¢°Û¤Ê¤ë¥½¡¼¥¹¥³¡¼¥É¤ÎµË¡¤ò³Ø½¬¤·¤Þ¤¹¡£
¡¡¥²¡¼¥àÆâ»þ´Ö¤ò·×¬¤·¡¢£±É䴤Ȥ˲èÌ̤Îɽ¼¨¤ò¹¹¿·¤¹¤ë
¡¡²èÌ̤Îɽ¼¨¤Ë¤Ä¤¤¤Æ¤ÏÊ̤μê½ç¤Ç¹Ô¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤³¤Ç¤Ï¡¢¥²¡¼¥àÆâ»þ´Ö¤Î·×¬¤Î»ÅÊý¤Ë¤Ä¤¤¤Æ
ÍÍ¡¹¤Ê¥½¡¼¥¹¥³¡¼¥É¤ÎµË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£
¡¡¤¤¤º¤ì¤ÎµË¡¤Ë¤ª¤¤¤Æ¤â¡¢½èÍýÆâ¤Ë¤Ï Debug.Log ¥á¥½¥Ã¥É¤òÍѤ¤¤Æ¡¢Console ¥Ó¥å¡¼¤Ë¤Æ»þ´Ö¤¬Àµ¾ï¤Ë·×¬¤Ç¤¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Þ¤¹¡£
¡ã¼Â¹Ô»þ¤Î½èÍý¤Î³Îǧ¡ä

¡¡³Æ¥½¡¼¥¹¥³¡¼¥É¤òµ½Ò¤·¤¿¤é¡¢É¬¤º¥Ç¥Ð¥Ã¥°¤ò¹Ô¤¤¤Þ¤¹¡£
¾åµ¤Î¤è¤¦¤Ë Console ¥Ó¥å¡¼¤Ë Debug.Log ¥á¥½¥Ã¥É¤Î¼Â¹Ô·ë²Ì¤¬É½¼¨¤µ¤ì¤ë¤³¤È¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡£´¤Ä¤ÎÊýË¡¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤½¤Î¤¦¤Á¤Î£±¡Á£³¤Ë¤Ä¤¤¤Æ¤Ï¡¢¤¤¤º¤ì¤â¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤òÍøÍѤ·¤¿½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡Observable.EveryUpdate ¤Ï UniRx ¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤Ç¤¹¡£
¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤È¤Ï¡¢Subject ¤òÍÑ°Õ¤·¤Ê¤¯¤Æ¤â Observable ¤òÀ¸À®¤·¤ÆÍøÍѤǤ¤ë static ¥á¥½¥Ã¥É·²¤Î¤³¤È¤Ç¤¹¡£
ÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢UniRx ¤ÎÀë¸À¤Ë²Ã¤¨¤Æ¡¢Observable ¥¯¥é¥¹¤òµ½Ò¤¹¤ë¤³¤È¤Ç¡¢¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤ò¼Â¹Ô¤Ç¤¤Þ¤¹¡£
¡¡Observable.EveryUpdate ¥á¥½¥Ã¥É¤Ï¡¢MonoBehaviour ¤Î Update ¥á¥½¥Ã¥É¤ò Observable ¤ËÊÑ´¹¤·¤ÆÍøÍѤǤ¤Þ¤¹¡£
¤³¤³¤Ç¤Ï¤½¤Îµ¡Ç½¤òÍøÍѤ·¤Æ½èÍý¤òºîÀ®¤·¤Æ¤¤¤Þ¤¹¡£
TimeSample_4.cs
¡¡¤Ê¤ª 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 ¥¯¥é¥¹¤ÎÀë¸À¤«¤é½èÍý¤¬»Ï¤Þ¤ê¤Þ¤¹)
¡¡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 ¥¯¥é¥¹¤ÎÀë¸À¤«¤é½èÍý¤¬»Ï¤Þ¤ê¤Þ¤¹)
¡¡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
¡¡Interval ¤È Timer ¤òÍøÍѤ·¤Æ·«¤êÊÖ¤·¤Î½èÍý¤ò¹Ô¤¦¾ì¹ç¤Ë¤Ï¡¢ºÇ½é¤Î¥á¥Ã¥»¡¼¥¸¤òȯ¹Ô¤¹¤ë¥¿¥¤¥ß¥ó¥°¤¬°Û¤Ê¤ë¤³¤È¤¬¥Ý¥¤¥ó¥È¤Ç¤¹¡£
¡¡¶¦Ä̤ÎÃí°ÕÅÀ¤È¤·¤Æ¤Ï¡¢Interval ¤È¡¢¾åµ¤Î¤è¤¦¤Ë Timer ¤ËÂè2°ú¿ô¤Þ¤Çµ½Ò¤·¤¿¾ì¹ç¡¢¤É¤Á¤é¤â̵¸Â¤Ë·«¤êÊÖ¤¹¤Î¤Ç¡¢OnCompleted ¥á¥Ã¥»¡¼¥¸¤¬È¯¹Ô¤µ¤ì¤Þ¤»¤ó¡£
¤è¤Ã¤Æ¼êÆ°¤Ç Dispose ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£¤³¤ì¤ò˺¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡AddTo ¥á¥½¥Ã¥É¤òÍøÍѤǤ¤Þ¤¹¤Î¤Ç¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ç¹ØÆɤòÄä»ß¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢AddTo ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ Dispose ¤¹¤ë¤Î¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£
¡¡¤³¤Á¤é¤Ï 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 ¤Ï¤É¤Á¤é¤â Update ¥á¥½¥Ã¥É¤ò Observable ²½(ÊÑ´¹)¤·¤¿¤â¤Î¤Ç¤¹¤¬¡¢Â¿¤¯¤ÎÉôʬ¤Ç°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£
Æä˽ÅÍפÊÉôʬ¤È¤·¤Æ¤Ï¡¢°Ê²¼¤Î¤è¤¦¤ÊÉôʬ¤Ç¤¹¡£
Observable.EveryUpdate | UpdateAsObservable | |
£±¡¥¥á¥Ã¥»¡¼¥¸¤Î¥Ç¡¼¥¿·¿ | long | Unit |
£²¡¥OnCompleted ¥á¥Ã¥»¡¼¥¸ | ȯ¹Ô¤µ¤ì¤Ê¤¤ | ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ»þ¤Ëȯ¹Ô¤µ¤ì¤ë |
£³¡¥¥¤¥Ù¥ó¥È´Ø¿ô¤Î Observable ÊÑ´¹ | ¥°¥í¡¼¥Ð¥ë¤Ê¥¤¥Ù¥ó¥È | GameObject ¤Ë´ØÏ¢¤·¤¿¥¤¥Ù¥ó¥È |
¡¡Â¾¤Ë¤â¡¢Observabe ¤ò´ÉÍý¤¹¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î°ã¤¤¤ä¡¢¥¤¥Ù¥ó¥Èȯ¹Ô¤Î¥¿¥¤¥ß¥ó¥°¤Î°ã¤¤¤Ê¤É¤â¤¢¤ê¤Þ¤¹¡£
Observable.EveryUpdate ¤ÏÆÃÄê¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ëɳ¤Å¤«¤Ê¤¯¤Æ¤âÍøÍѤǤ¤Þ¤¹(MonoBehaviour ¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¥¯¥é¥¹¤Ç¤âÍøÍѤǤ¤ë)¤¬¡¢
UpdateAsObservable ¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î Component(MonoBehaviour)¤Ëɳ¤Å¤¡¢¤½¤Î Update ¥á¥½¥Ã¥É¤Î¥¿¥¤¥ß¥ó¥°¤Ç¥¤¥Ù¥ó¥È¤òȯ¹Ô¤·¤Þ¤¹¡£
¡¡²¼µ¤Î¥µ¥¤¥È¤Ë¾ÜºÙÀâÌÀ¤¬ºÜ¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤ì¤¾¤ì¤Î¥á¥ê¥Ã¥È¡¦¥Ç¥á¥ê¥Ã¥È¡¢ÍøÍѤ¹¤ë¥±¡¼¥¹¤Ê¤É¤ò³Îǧ¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡ã»²¹Í¥µ¥¤¥È¡ä
Qiita @toRisouP(³ô¼°²ñ¼Ò ¥Ð¡¼¥Á¥ã¥ë¥¥ã¥¹¥È) ÍÍ
UniRxÆþÌç ¤½¤Î4 -Update¤ò¥¹¥È¥ê¡¼¥à¤ËÊÑ´¹¤¹¤ëÊýË¡¤È¥á¥ê¥Ã¥È-
¡¡UniTask ¤òÍøÍѤ·¤¿½èÍý¤Î¥±¡¼¥¹¤Ë¤Ä¤¤¤Æ¡¢£²¤ÄÄ󼨤·¤Þ¤¹¡£
¡¡¤É¤Á¤é¤â UniTask ¤ËÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¯¥È¥ê¡¦¥á¥½¥Ã¥É¤ò³èÍѤ·¡¢async / await ¤Îµ¡Ç½¤òÍøÍѤ·¤Æ»þ´Ö¤Î·×¬½èÍý¤ò¹Ô¤¦¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤½¤Î¾ì¹ç¡¢ÈóƱ´ü½èÍý¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë¤Ï ¡Á Async ¤Èµ½Ò¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£
¡¡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 ¥á¥½¥Ã¥É¤ò³èÍѤ·¡¢¼Â¹Ô¥³¥ó¥Æ¥¥¹¥È(¥³¡¼¥É¤ò¼Â¹Ô¤¹¤ëºÝ¤Î¾õ¶·)¤ò 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Éäò·×¬¤¹¤ë)¤ËÂФ·¤Æ¡¢¿§¡¹¤Ê½èÍý¤Î¼ÂÁõ¥Ñ¥¿¡¼¥ó¤¬¤¢¤ë¤³¤È¤¬¸«¤¨¤Æ¤¯¤ë¤È»×¤¤¤Þ¤¹¡£
¤³¤ì¤é¤ò³Ð¤¨¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥í¥¸¥Ã¥¯¤ò¹Í¤¨¤ë¤È¤¡¢½èÍý¤ò¹½ÃÛ¤¹¤ëºÝ¤Î¥½¡¼¥¹¥³¡¼¥É¤Îµ½Ò¤Î°ú¤½Ð¤·¤òÁý¤ä¤¹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¥±¡¼¥¹¤Ë±þ¤¸¤Æ»È¤¤Ê¬¤±¤é¤ì¤ë¤è¤¦¤Ë¡¢Àß·×ÎÏ¡¢¼ÂÁõÎϤòÍܤäƤ¤¤¤Þ¤·¤ç¤¦¡£
¡¡¼ÂÁõ¤Ë¤¢¤¿¤ê¡¢¤É¤ó¤ÊÊýË¡¤¬¤¢¤ë¤Î¤«¤ò¾ï¤Ë¹Í¤¨¤Æ»ëÌî¤ò¹¤¯¤â¤Ä¤è¤¦¤Ë¤¹¤ë¤³¤È¤âÂçÀڤˤʤê¤Þ¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯