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

¡¡¥³¥ë¡¼¥Á¥ó¤Î¥á¥½¥Ã¥É¤ÈƱ¤¸ÈóƱ´ü½èÍý¤Ç¤¢¤ë UniTask ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤Î¼ÂÁõÎã¤Ç¤¹¡£



Àß·×


¡¡Á°²ó¤Þ¤Ç¤ÎÊ£¿ô¤ÎÈóƱ´ü½èÍý¤Ë¤è¤ë¥¤¥Ù¥ó¥È½èÍý¤Ë¤Ä¤¤¤Æ¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È UniTask ¤òÍøÍѤ·¡¢¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤¿¾ì¹ç¤Î½èÍý¤Ç¤¹¡£

¡¡½èÍý¤ÎÆâÍƤÏƱ¤¸¡¢ÂÔµ¡·¿¤Ç¼Â¹Ô¤µ¤ì¤ëÈóƱ´ü½èÍý¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢UniTask ¤òÍøÍѤ·¤¿Êý¤¬½èÍý¤ò¤¹¤Ã¤­¤ê¤Èµ­½Ò¤Ç¤­¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢º£¤Þ¤Ç¤Î¥³¥ë¡¼¥Á¥ó¤Î¥á¥½¥Ã¥É¤Î½èÍý¤ò»Ä¤·¤Ä¤Ä¡¢UniTask ¤ÎÈóƱ´ü½èÍý¤ËÃÖ¤­´¹¤¨¤Æ³Ø½¬¤·¤Þ¤¹¡£

¡¡¹ç¤ï¤»¤ÆÃê¾Ý²½¤Î¥Ý¥¤¥ó¥È¤Î£±¤Ä¤Ë¤Ê¤ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤Ä¤¤¤Æ¤â³Ø½¬¤·¤Þ¤¹¡£


¡ãUniTask ¤ò¥¤¥ó¥Ý¡¼¥È¤¹¤ë¡ä

£±¡¥¡ãUniTask ¤È¤Ï¡©¡ä


¡¡C# ¤Ë¤ª¤¤¤ÆÄ󶡤µ¤ì¤Æ¤¤¤ë Task µ¡Ç½¤ò¡¢¤è¤ê Unity ¤ËºÇŬ²½¤·¡¢¤è¤ê°·¤¤¤ä¤¹¤¯¤·¤¿¤â¤Î¤¬¡¢UniTask ¤Ë¤Ê¤ê¤Þ¤¹¡£
UniTask ¤ÏÈóƱ´ü½èÍý¤ËÍ¥¤ì¤Æ¤ª¤ê¡¢¥³¥ë¡¼¥Á¥ó¤Ë¤è¤ë½èÍý¤Î¿¤¯¤ò async / await ¥­¡¼¥ï¡¼¥É¤ò»È¤Ã¤ÆÈóƱ´ü½èÍý¤È¤·¤Æµ­½Ò¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

Chsharp ÍÍ
https://github.com/Cysharp/UniTask


¡¡¥¹¥¯¥ê¥×¥ÈÆâ¤Ç UniTask ¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢using Cysharp.Threading.Tasks; ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¡Â礭¤Ê°ã¤¤¤È¤·¤Æ¡¢¥³¥ë¡¼¥Á¥ó¤ä Invoke ¥á¥½¥Ã¥É¤Ï MonoBehavior ¥¯¥é¥¹Æâ¤Î¥á¥ó¥Ð¤Ç¤¢¤ë¤¿¤á¡¢MonoBehavior ¤ò·Ñ¾µ¤·¤Ê¤¤¤È¼ÂÁõ¤¬½ÐÍè¤Þ¤»¤ó¤¬¡¢UniTask ¤È async / await ¤Ë¤Ï¤½¤ÎÀ©Ìó¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤Ä¤Þ¤ê¡¢MonoBehavior ¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤ static ¥¯¥é¥¹¤Ê¤É¤Ç¤âÍøÍѲÄǽ¤Ç¤¹¡£
¡¡
¡¡¤Þ¤¿¡¢¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿Ãʳ¬¤Ç¼«Æ°Åª¤Ë½èÍý¤¬ÇË´þ(¥­¥ã¥ó¥»¥ë)¤µ¤ì¤Þ¤¹¤¬¡¢
async / await ¤Ç¼ÂÁõ¤·¤¿ÈóƱ´ü½èÍý¤Ï¼«Æ°Åª¤Ë¤ÏÄä»ß¤·¤Þ¤»¤ó¤Î¤Ç¡¢¥­¥ã¥ó¥»¥ë½èÍý¤ò¹Í¤¨¤Æ¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£


¡ã»²¹Í¥µ¥¤¥È¡ä
Qiita @toRisouP ÍÍ
UniTaskµ¡Ç½¾Ò²ð
https://qiita.com/toRisouP/items/4445b6b9bf00e49eb...
¥½¥Õ¥È¥á¥Ç¥£¥¢¸¦µæ²ñ ¤¹¤¤¤Þ ÍÍ
UniTask¤Ç¥ì¥Ã¥ÄÈóƱ´ü¡ª
http://softmedia.sakura.ne.jp/advent-calendar/2019...



¡¡UniTask ¤Ï¥¢¥»¥Ã¥È¥¹¥È¥¢¤Ë¤Ï¤¢¤ê¤Þ¤»¤ó¡£
Github ¥µ¥¤¥È¤«¤é UniTask ÍѤΠUnitypackage ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤ò¹Ô¤¦¤«¡¢PackageManager ·Ðͳ¤Ç¥¤¥ó¥Ý¡¼¥È¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡
¡¡¼¡¤Ï½çÈ֤ˤ½¤ì¤é¤Î¼ê½ç¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤É¤Á¤é¤ÎÊýË¡¤Ç¥¤¥ó¥Ý¡¼¥È¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£


£²¡¥Github ¥µ¥¤¥È¤«¤é Unitypackage ¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤¹¤ë¾ì¹ç

https://github.com/Cysharp/UniTask/releases

¡ãUnitypackage ¤òÁªÂò¤¹¤ë¡ä



¡¡Unity ¤òµ¯Æ°¤·¡¢¥À¥¦¥ó¥í¡¼¥É¤·¤¿ Unitypackage ¤ò Unity Æâ¤Î Assets ¥Õ¥©¥ë¥À¤Ë¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£
¥¤¥ó¥Ý¡¼¥ÈÍѤΥݥåץ¢¥Ã¥×¥¦¥¤¥ó¥É¥¦¤¬³«¤­¤Þ¤¹¤Î¤Ç¡¢Import ¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£¼«Æ°Åª¤Ë¥¤¥ó¥Ý¡¼¥È¤¬»Ï¤Þ¤ê¤Þ¤¹¡£


£³¡¥PackageManager ·Ðͳ¤Ç¥¤¥ó¥Ý¡¼¥È¤¹¤ë¾ì¹ç


¡¡Unity Æâ¤Ç PackageManager ¥¦¥¤¥ó¥É¥¦¤ò³«¤­¡¢º¸¾å¤Î ¡Ü ¥¢¥¤¥³¥ó¤ò²¡¤·¤Æ¡¢Add package from git URL... ¤òÁªÂò¤·¤Þ¤¹¡£





¡¡Github ¤Î URL ¤òÆþÎϤ¹¤ë¥Ý¥Ã¥×¥¢¥Ã¥×¤¬½Ð¤Þ¤¹¤Î¤Ç¡¢¤½¤Á¤é¤Ë¡¢²¼µ­¤Î URL ¤ò¥³¥Ô¡¼¤·¤ÆŽ¤êÉÕ¤±¡¢Add ¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£

¡ãUniTask ¤Î GitURL¡ä
 https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask


¡ã¾åµ­¤Î URL ¤ò¥³¥Ô¡¼¤·¤ÆŽ¤êÉÕ¤±¤Æ¤«¤é Add ¥Ü¥¿¥ó¤ò²¡¤¹¡ä



¡¡°Ê¾å¤Î¼ê½ç¤ò¹Ô¤¦¤È¡¢¼«Æ°Åª¤Ë UniTask ¤Î¥¤¥ó¥Ý¡¼¥È¤¬»Ï¤Þ¤ê¤Þ¤¹¡£








£´¡¥¡ãasync ¥­¡¼¥ï¡¼¥É¤È await ¥­¡¼¥ï¡¼¥É¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¡ä


¡¡¤³¤Î¥­¡¼¥ï¡¼¥É·²¤Ï C# ¤Î Task ¥¯¥é¥¹¡¢¤ª¤è¤Ó UniTask ¥¯¥é¥¹¤Ëɳ¤Å¤¤¤¿¹½Ê¸¤Ç¤¹¡£
¤è¤Ã¤Æ Task ¥¯¥é¥¹¤« UniTask ¥¯¥é¥¹¤È°ì½ï¤ËÀë¸À¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£

¡¡async(¥¨¥¤¥·¥ó¥¯) ¤Ï Asynchoronous(¥¨¥¤¥·¥ó¥¯¥í¥Ê¥¹) ¤È¤¤¤¦Ã±¸ì¤Îά¸ì¤Ç¡ÖÈóƱ´ü¡×¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£
¤³¤ì¤Ï await ¤òÍøÍѤ¹¤ë¥á¥½¥Ã¥É¤òµ­½Ò¤¹¤ë¤¿¤á¤Ë¡¢¥á¥½¥Ã¥É¤ÎÀë¸À»þ¤Ë¤Ä¤±¤ëɬÍפ¬¤¢¤ë¥­¡¼¥ï¡¼¥É¤Ç¤¹¡£
¤½¤ÎºÝ¡¢Ìá¤êÃÍ¤Ë¤Ï UniTask ¤òÍøÍѤ·¤Þ¤¹¡£

¡¡¤Ê¤ª¡¢¥á¥½¥Ã¥É̾¤Ï¡¢ÈóƱ´ü½èÍý¤¬²Äǽ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤è¤¦¤Ë¡¢¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë ¡Á Async ¤È¤Ä¤±¤ë¤Èʬ¤«¤ê¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡ãasync ¥­¡¼¥ï¡¼¥É¡ä
private async UniTask HogeAsync() {

}



¡¡await(¥¢¥¦¥§¥¤¥È) ¥­¡¼¥ï¡¼¥É¤Ï¡ÖÂÔ¤Á¼õ¤±¤ë¡×¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£
¤³¤Î¥­¡¼¥ï¡¼¥É¤Ï¡¢ÈóƱ´ü½èÍý¤È¤·¤Æ¼Â¹Ô¤¹¤ë¥á¥½¥Ã¥É¤ÎÀèƬ¤Ëµ­½Ò¤·¤Þ¤¹¡£

¡ãawait ¥­¡¼¥ï¡¼¥É¡ä
private async UniTask HogeAsync() {
    await HogeHogeAsync();
}



¡¡¤³¤Î£²¤Ä¤Î¥­¡¼¥ï¡¼¥É¤òÍøÍѤ·¡¢Ìá¤êÃͤη¿¤ò UniTask ¤Ë¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¥³¥ë¡¼¥Á¥ó½èÍý¤ÈƱ¤¸¤è¤¦¤ËÈóƱ´ü½èÍý¤ò¼Â¹Ô¤·¡¢¤½¤Î½èÍý¤Î²ò·è¤òÂÔ¤Á¼õ¤±¤ëµ¡Ç½(¥á¥¤¥ó¥¹¥ì¥Ã¥É¤Ë½èÍý¤¬Ìá¤Ã¤Æ¤¯¤ë¤Î¤òÂÔ¤Ä)¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤Þ¤¿¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥ÉÆâ¤Çµ­½Ò¤¬²Äǽ¤Ç¤¢¤Ã¤¿ yield return null ¤ä WaitUntil ¤Ê¤É¤â½èÍý¤â UniTask ¤Ë¤Ï static ¥á¥½¥Ã¥É¤È¤·¤ÆÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢async / await ¥­¡¼¥ï¡¼¥É¤ò»È¤¦¤³¤È¤Ç¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤òÃÖ¤­´¹¤¨¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¤Þ¤¿¥³¥ë¡¼¥Á¥ó¤Ç¤ÏľÀÜ»ØÄê¤Ç¤­¤Ê¤«¤Ã¤¿Ìá¤êÃͤâ UniTask<T> ¤È¤·¤Æµ­½Ò¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥¿¥×¥ë·¿¤òÍøÍѤ¹¤ë¤³¤È¤ÇÊ£¿ô¤ÎÌá¤êÃͤò»ý¤¿¤»¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£

¡¡¤Ê¤ª UniTask ¤Ë¤Ï void ¤ËÁêÅö¤¹¤ë UniTaskVoid ·¿¤¬¤¢¤ê¤Þ¤¹¡£¤³¤Á¤é¤Î·¿¤Ë¤¹¤ë¤³¤È¤Ç½èÍý¤òÂÔ¤Á¼õ¤±¤Ê¤¤(await ¤Ç¤­¤Ê¤¤)¥á¥½¥Ã¥É¤È¤·¤Æµ¡Ç½¤µ¤»¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£
½èÍý¤Î´°Î»¤òÄÌÃΤ¹¤ëɬÍפ¬¤Ê¤¤¥á¥½¥Ã¥É¤ÇÍøÍѤ¹¤ë¤¿¤á¡¢¤³¤Îµ¡Ç½¤Ï UniTask ¤ò»È¤Ã¤¿ÈóƱ´ü½èÍý¤ÎºÇ¸å¤ËÍøÍѤµ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£(ÈóƱ´ü½èÍý¤òºÇ½é¤Ë½èÍý¤·»Ï¤á¤ë¾ì½ê¡¢¤È¤â¸À¤¨¤Þ¤¹)

¡ã»²¹Í¥µ¥¤¥È¡ä
MicroSoft
Async
Qiita @4_mio_11 ÍÍ
ÈóƱ´üÍý²ò¤Î¤¿¤á¤Ëasync/await¤ÈTask¤Î´ðÁäò³Ø¤ó¤ÀÏÃ


¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Îµ¡Ç½¤ÈÄêµÁ


¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥¯¥é¥¹¤ËÂФ·¤ÆÆÃÄê¤Î¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤ò¼ÂÁõ¤¹¤ë¤³¤È¤òÍ׵᤹¤ë¤³¤È¤¬¤Ç¤­¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢Ê£¿ô¤Î¥¯¥é¥¹¤ÇƱ¤¸Æ°ºî¤ò¤¹¤ë¤³¤È¤ò¶¯À©¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

»²¹Í¥µ¥¤¥È
++C++; // ̤³ÎǧÈô¹Ô C ÍÍ
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹



¡¡¼ÂÁõ¤ÎÊýË¡¤Ï¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄêµÁ¤¹¤ë¤¿¤á¤Î¡Öinterface¡×¥­¡¼¥ï¡¼¥É¤ò»ÈÍѤ·¤Þ¤¹¡£Î㤨¤Ð¡¢¼¡¤Î¤è¤¦¤Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄêµÁ¤Ç¤­¤Þ¤¹¡£


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




¡¡¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤Ï¡¢¡ÖIMoveable¡×¤ò¼ÂÁõ¤·¤Æ¡¢¡ÖMove¡×¥á¥½¥Ã¥É¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬É¬Íפˤʤê¤Þ¤¹¡£


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




¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÍøÅÀ¤È¤·¤Æ¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¡¦Ê£¿ô¤Î¥¯¥é¥¹¤ÇƱ¤¸Æ°ºî¤ò¶¯À©¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
¡¡¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò·Ñ¾µ¤·¤¿¥¯¥é¥¹¤ËÂФ·¤ÆƱ¤¸¤è¤¦¤ËÁàºî¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
¡¡¡¦¥³¡¼¥É¤ÎÊݼéÀ­¤ò¹â¤á¤ë¤³¤È¤¬¤Ç¤­¤ë¡£
¡¡¡¦²¾Áۥ᥽¥Ã¥É¤è¤ê¤â·ÚÎ̤Ǥ¢¤ë¡£

¡¡¤³¤ì¤é¤ÎÍøÅÀ¤Ë¤è¤ê¡¢¤è¤ê¥¹¥Þ¡¼¥È¤Ê¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎºîÀ®


¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÄ̾ï¤Î C# ¥¹¥¯¥ê¥×¥È¤«¤éºîÀ®¤Ç¤­¤Þ¤¹¡£
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤Ë¤Ï̿̾µ¬Â§¤¬¤¢¤ê¡¢ÀèƬ¤Ë¡ÖI(Âçʸ»ú¤Î¥¢¥¤¡£¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎƬʸ»ú)¡×¤ò¤Ä¤±¤ÆºîÀ®¤·¤Þ¤¹¡£

¡¡¤¤¤Ä¤â¤Ï public class ¤È½ñ¤¤¤Æ¤¢¤ëÉôʬ¤Î class ¤ò interface ¤ËÊѤ¨¤Þ¤¹¡£
¤³¤ì¤Ç¤³¤Î¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤Ï¡¢¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æµ¡Ç½¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡UniTask ¤òÍøÍѤ¹¤ë¾ì¹ç¡¢ÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤ò¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ËÄêµÁ¤·¤Æ¤ª¤¯¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¥³¥ë¡¼¥Á¥ó¤Î¥á¥½¥Ã¥É¤Ï MonoBehaviour ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¤ÈÄêµÁ¤Ç¤­¤Ê¤¤¤¿¤á¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤Ë¤ÏÄêµÁ½ÐÍè¤Þ¤»¤ó¡£

¡¡ÈóƱ´ü½èÍý¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ï¡¢ÈóƱ´ü¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë¤Ï ¡Á Async ¤Èµ­½Ò¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£


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


¡¡¥á¥½¥Ã¥É¤Î½ñ¼°¤¬¸«´·¤ì¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢Ä̾ï¤Î¥á¥½¥Ã¥É¤ÈƱÍͤǤ¹¡£
¥¢¥¯¥»¥¹½¤¾þ»Ò(public)¡¡Ìá¤êÃͤη¿(UniTask<bool>)¡¡¥á¥½¥Ã¥É̾(ExecuteEventAsync)¡¡°ú¿ô(CancellationToken token)¡¡¤È¤¤¤¦Ê¤ӤǤ¹¡£


¿Æ¥¯¥é¥¹


¡¡ºîÀ®ºÑ¤Î¿Æ¥¯¥é¥¹¤Ç¤¢¤ë GameEventBase ¥¯¥é¥¹¤Ë IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¡¢
IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ÇÄêµÁ¤·¤Æ¤¤¤ë ExecuteEventAsync ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¡¢¤½¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ËÄêµÁ¤·¤Æ¤¤¤ë¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¤È¥¨¥é¡¼¤¬½Ð¤Þ¤¹¡£
¤Ê¤¼¤Ê¤é¤Ð¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤ª¤±¤ë¥á¥½¥Ã¥É¤Ï¤¤¤ï¤Ð²¾ÁÛ¾õÂ֤Ǥ¢¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤Ç¤Ï¥á¥½¥Ã¥É¤ÎÆâÍƤòµ­½Ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£
¤¢¤¯¤Þ¤Ç¤â¥á¥½¥Ã¥É¤ÎÄêµÁ¤òºî¤Ã¤Æ¤¤¤ë¤À¤±¤Ç¤¢¤ê¡¢¶ñÂÎŪ¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë½èÍý¤¬¤¢¤ê¤Þ¤»¤ó¡£

¡¡¤½¤Î¤¿¤á¡¢¥¯¥é¥¹¤Î·Ñ¾µ¤ÇÍøÍѤǤ­¤ë²¾Áۥ᥽¥Ã¥É¤È°Û¤Ê¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤Ï¥á¥½¥Ã¥É¤Î¼ÂÁõ(Ãæ¿È¤ò½ñ¤¯)¤ò¶¯À©¤¹¤ëÎϤ¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¶¯À©ÎϤ¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÆÃħ¤Ç¤¹¡£

¡¡¤Þ¤¿¥á¥½¥Ã¥É¤Î¼ÂÁõ¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢virtaul ¥­¡¼¥ï¡¼¥É¤òǤ°Õ¤ÇÀßÄê¤Ç¤­¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢ºÆÅÙ¡¢²¾Áۥ᥽¥Ã¥É¤È¤·¤Æ½èÍý¤ÎÃê¾Ý²½¤ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
º£²ó¤Ï virtual ¥­¡¼¥ï¡¼¥É¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤Î¿Æ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿»Ò¥¯¥é¥¹Æâ¤Ç¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤ÆÍøÍѤǤ­¤Þ¤¹¡£


GameEventBase.cs

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



¡ãasync / await ¤È UniTask ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤Î¥Ý¥¤¥ó¥È¡ä


¡¡ÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢async ¥­¡¼¥ï¡¼¥É¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£
¤Þ¤¿¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë̿̾µ¬Â§¤Ë§¤Ã¤Æ ¡Á Async ¤Èµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£

¡¡Ìá¤êÃͤη¿¤Ï UniTask ·¿¤Ç¤¹¡£ÃͤòÊÖ¤µ¤Ê¤¤¾ì¹ç¤Ë¤Ï UniTask ¤Î¤ß¤òµ­½Ò¤·¡¢¥á¥½¥Ã¥ÉÆâ¤ÎÃͤòÌᤷ¤¿¤¤¾ì¹ç¤Ë¤Ï UniTask<T> ¤Èµ­½Ò¤·¤Þ¤¹¡£
T ¤ÎÉôʬ¤Ï¥¸¥§¥Í¥ê¥Ã¥¯¤Ç¤¹¤Î¤Ç¡¢Ç¤°Õ¤Î·¿¤òµ­½Ò¤Ç¤­¤Þ¤¹¡£º£²ó¤Ï UniTask<bool> ¤Ç¤¹¤Î¤Ç¡¢Ìá¤êÃͤη¿¤Ï bool ·¿¤Ç¤¹¡£
¥á¥½¥Ã¥ÉÆâ¤Ë return ¤Îµ­½Ò¤ò¤¹¤ë¤³¤È¤Ç bool ·¿¤ÎÃͤòÌ¿Îḵ¤ËÌ᤹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£



¡¡¥³¥ë¡¼¥Á¥ó¤ÎÈóƱ´ü½èÍý¤È°Û¤Ê¤ê¡¢async / await ¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤Æ¤â½èÍý¤¬Ää»ß¤·¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ë¹ç¤ï¤»¤Æ¥­¥ã¥ó¥»¥ë¤¹¤ë½èÍý¤ò¼«Á°¤Ç¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

¡¡¥­¥ã¥ó¥»¥ëµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï CancellationToken ·¿¤ÎÃͤ¬É¬Íפˤʤê¤Þ¤¹¤Î¤Ç¡¢
°ú¿ô¤òÍøÍѤ·¤ÆÌ¿Îḵ¤«¤é CancellationToken ·¿¤ÎÃͤò¼èÆÀ¤·¡¢¤³¤Î¥á¥½¥Ã¥ÉÆâ¤Ç¼Â¹Ô¤µ¤ì¤ë await ½èÍý¤ËÂФ·¤Æ¥­¥ã¥ó¥»¥ë½èÍý¤òµ­½Ò¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
¡¡¸½»þÅÀ¤Ç¤Ï await UniTask.Yield(token); ¤ÎÉôʬ¤ÇÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£


¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤»¤ë¤¿¤á Serializable Interface ¥¢¥»¥Ã¥È¤ò¥¤¥ó¥Ý¡¼¥È¤¹¤ë


¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥Ç¡¼¥¿·¿¤È¤·¤ÆÊÑ¿ôÀë¸À¤·¤¿¾ì¹ç¡¢ SerializeField °À­¤òÉÕÍ¿¤·¤Æ¤¤¤Æ¤â¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ë¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£
¤³¤ì¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤½¤Î¤â¤Î¤Î»ÅÍͤǤ¹¡£
¡¡
¡¡¼¡²ó¤Î¼ê½ç¤Ç¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ËÅÐÏ¿¤·¤¿¤ê¤·¤¿¤¤¤Î¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤»¤ëµ¡Ç½¤òÄɲä·¤Þ¤¹¡£



¡¡ÌµÎÁ¥¢¥»¥Ã¥È¤Ç¤¢¤ë Serializable Interface ¥¢¥»¥Ã¥È¤ò Unity ¤Ë¥¤¥ó¥Ý¡¼¥È¤·¡¢¤½¤Á¤é¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥Ç¡¼¥¿·¿¤È¤·¤ÆºîÀ®¤·¤¿ÊÑ¿ô¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡²¼µ­¤Î Github Æâ¤Î¥Ú¡¼¥¸¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¤Æ Unity ¤Ë¥¤¥ó¥Ý¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤¡£

Github
Thundernerd/Unity3D-SerializableInterface

https://github.com/Thundernerd/Unity3D-Serializabl...


¡¡¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤ë¤È¥Õ¥©¥ë¥À¤¬Äɲ䵤ì¤Þ¤¹¡£


Propject ¥Õ¥©¥ë¥ÀÆâ



»²¹Í¥µ¥¤¥È
¥³¥¬¥Í¥Ö¥í¥° ÍÍ
¡ÚUnity¡ÛMonoBehaviour ¤Î»²¾È¤ò Interface ¤Ç Inspector ¤ËÀßÄê¤Ç¤­¤ë¡ÖSerializable Interface¡×¾Ò²ð



¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£
°ú¤­Â³¤­¼¡¤Î¼ê½ç¤Ë¤Æ½èÍý¤ò´°À®¤µ¤»¤Þ¤¹¡£

¡¡¼¡¤Î¼ê½ç¤Ï¡¡½èÍý¤ÎÃê¾Ý²½¤Ë¤è¤ë¼ÂÁõÎã­¦¡¡¤Ç¤¹¡£

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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