ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ03·î06Æü(·î) 16:37:25ÍúÎò
¡¡Á°²ó¤Þ¤Ç¤ÎÊ£¿ô¤ÎÈóƱ´ü½èÍý¤Ë¤è¤ë¥¤¥Ù¥ó¥È½èÍý¤Ë¤Ä¤¤¤Æ¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È 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 ·Ðͳ¤Ç¥¤¥ó¥Ý¡¼¥È¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡
¡¡¼¡¤Ï½çÈ֤ˤ½¤ì¤é¤Î¼ê½ç¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤É¤Á¤é¤ÎÊýË¡¤Ç¥¤¥ó¥Ý¡¼¥È¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£
https://github.com/Cysharp/UniTask/releases
¡ãUnitypackage ¤òÁªÂò¤¹¤ë¡ä

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


¡¡¤³¤Î¥¡¼¥ï¡¼¥É·²¤Ï 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¡×¥á¥½¥Ã¥É¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬É¬Íפˤʤê¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÍøÅÀ¤È¤·¤Æ¤Ï¡¢¼¡¤Î¤è¤¦¤Ê¤â¤Î¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¡¦Ê£¿ô¤Î¥¯¥é¥¹¤ÇƱ¤¸Æ°ºî¤ò¶¯À©¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò·Ñ¾µ¤·¤¿¥¯¥é¥¹¤ËÂФ·¤ÆƱ¤¸¤è¤¦¤ËÁàºî¤¹¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦¥³¡¼¥É¤ÎÊݼéÀ¤ò¹â¤á¤ë¤³¤È¤¬¤Ç¤¤ë¡£ ¡¡¡¦²¾Áۥ᥽¥Ã¥É¤è¤ê¤â·ÚÎ̤Ǥ¢¤ë¡£
¡¡¤³¤ì¤é¤ÎÍøÅÀ¤Ë¤è¤ê¡¢¤è¤ê¥¹¥Þ¡¼¥È¤Ê¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÄ̾ï¤Î C# ¥¹¥¯¥ê¥×¥È¤«¤éºîÀ®¤Ç¤¤Þ¤¹¡£
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾Á°¤Ë¤Ï̿̾µ¬Â§¤¬¤¢¤ê¡¢ÀèƬ¤Ë¡ÖI(Âçʸ»ú¤Î¥¢¥¤¡£¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎƬʸ»ú)¡×¤ò¤Ä¤±¤ÆºîÀ®¤·¤Þ¤¹¡£
¡¡¤¤¤Ä¤â¤Ï public class ¤È½ñ¤¤¤Æ¤¢¤ëÉôʬ¤Î class ¤ò interface ¤ËÊѤ¨¤Þ¤¹¡£
¤³¤ì¤Ç¤³¤Î¥¹¥¯¥ê¥×¥È¥Õ¥¡¥¤¥ë¤Ï¡¢¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æµ¡Ç½¤¹¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡UniTask ¤òÍøÍѤ¹¤ë¾ì¹ç¡¢ÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤ò¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ËÄêµÁ¤·¤Æ¤ª¤¯¤³¤È¤¬²Äǽ¤Ç¤¹¡£
¥³¥ë¡¼¥Á¥ó¤Î¥á¥½¥Ã¥É¤Ï MonoBehaviour ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¤ÈÄêµÁ¤Ç¤¤Ê¤¤¤¿¤á¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤Ë¤ÏÄêµÁ½ÐÍè¤Þ¤»¤ó¡£
¡¡ÈóƱ´ü½èÍý¤ò¹Ô¤¦¥á¥½¥Ã¥É¤Ï¡¢ÈóƱ´ü¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë¤Ï ¡Á Async ¤Èµ½Ò¤¹¤ë¤è¤¦¤Ë¤¹¤ë¤³¤È¤ò¿ä¾©¤·¤Þ¤¹¡£
¡¡¥á¥½¥Ã¥É¤Î½ñ¼°¤¬¸«´·¤ì¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢Ä̾ï¤Î¥á¥½¥Ã¥É¤ÈƱÍͤǤ¹¡£
¥¢¥¯¥»¥¹½¤¾þ»Ò(public)¡¡Ìá¤êÃͤη¿(UniTask<bool>)¡¡¥á¥½¥Ã¥É̾(ExecuteEventAsync)¡¡°ú¿ô(CancellationToken token)¡¡¤È¤¤¤¦Ê¤ӤǤ¹¡£
¡¡ºîÀ®ºÑ¤Î¿Æ¥¯¥é¥¹¤Ç¤¢¤ë GameEventBase ¥¯¥é¥¹¤Ë IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¡¢
IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ÇÄêµÁ¤·¤Æ¤¤¤ë ExecuteEventAsync ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¡¢¤½¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ËÄêµÁ¤·¤Æ¤¤¤ë¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤Ê¤¤¤È¥¨¥é¡¼¤¬½Ð¤Þ¤¹¡£
¤Ê¤¼¤Ê¤é¤Ð¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤ª¤±¤ë¥á¥½¥Ã¥É¤Ï¤¤¤ï¤Ð²¾ÁÛ¾õÂ֤Ǥ¢¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤Ç¤Ï¥á¥½¥Ã¥É¤ÎÆâÍƤòµ½Ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤»¤ó¡£
¤¢¤¯¤Þ¤Ç¤â¥á¥½¥Ã¥É¤ÎÄêµÁ¤òºî¤Ã¤Æ¤¤¤ë¤À¤±¤Ç¤¢¤ê¡¢¶ñÂÎŪ¤Ëµ½Ò¤µ¤ì¤Æ¤¤¤ë½èÍý¤¬¤¢¤ê¤Þ¤»¤ó¡£
¡¡¤½¤Î¤¿¤á¡¢¥¯¥é¥¹¤Î·Ñ¾µ¤ÇÍøÍѤǤ¤ë²¾Áۥ᥽¥Ã¥É¤È°Û¤Ê¤ê¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤Ï¥á¥½¥Ã¥É¤Î¼ÂÁõ(Ãæ¿È¤ò½ñ¤¯)¤ò¶¯À©¤¹¤ëÎϤ¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¶¯À©ÎϤ¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎÆÃħ¤Ç¤¹¡£
¡¡¤Þ¤¿¥á¥½¥Ã¥É¤Î¼ÂÁõ¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢virtaul ¥¡¼¥ï¡¼¥É¤òǤ°Õ¤ÇÀßÄê¤Ç¤¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢ºÆÅÙ¡¢²¾Áۥ᥽¥Ã¥É¤È¤·¤Æ½èÍý¤ÎÃê¾Ý²½¤ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
º£²ó¤Ï virtual ¥¡¼¥ï¡¼¥É¤òÀßÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¤³¤Î¿Æ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿»Ò¥¯¥é¥¹Æâ¤Ç¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤ÆÍøÍѤǤ¤Þ¤¹¡£
GameEventBase.cs
¡¡ÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤Ç¤¢¤ë¤³¤È¤ò¼¨¤¹¤¿¤á¡¢async ¥¡¼¥ï¡¼¥É¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£
¤Þ¤¿¥á¥½¥Ã¥É̾¤ÎºÇ¸å¤Ë̿̾µ¬Â§¤Ë§¤Ã¤Æ ¡Á Async ¤Èµ½Ò¤·¤Æ¤¤¤Þ¤¹¡£
¡¡Ìá¤êÃͤη¿¤Ï UniTask ·¿¤Ç¤¹¡£ÃͤòÊÖ¤µ¤Ê¤¤¾ì¹ç¤Ë¤Ï UniTask ¤Î¤ß¤òµ½Ò¤·¡¢¥á¥½¥Ã¥ÉÆâ¤ÎÃͤòÌᤷ¤¿¤¤¾ì¹ç¤Ë¤Ï UniTask<T> ¤Èµ½Ò¤·¤Þ¤¹¡£
T ¤ÎÉôʬ¤Ï¥¸¥§¥Í¥ê¥Ã¥¯¤Ç¤¹¤Î¤Ç¡¢Ç¤°Õ¤Î·¿¤òµ½Ò¤Ç¤¤Þ¤¹¡£º£²ó¤Ï UniTask<bool> ¤Ç¤¹¤Î¤Ç¡¢Ìá¤êÃͤη¿¤Ï bool ·¿¤Ç¤¹¡£
¥á¥½¥Ã¥ÉÆâ¤Ë return ¤Îµ½Ò¤ò¤¹¤ë¤³¤È¤Ç bool ·¿¤ÎÃͤòÌ¿Îḵ¤ËÌ᤹¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¥³¥ë¡¼¥Á¥ó¤ÎÈóƱ´ü½èÍý¤È°Û¤Ê¤ê¡¢async / await ¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤Æ¤â½èÍý¤¬Ää»ß¤·¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ë¹ç¤ï¤»¤Æ¥¥ã¥ó¥»¥ë¤¹¤ë½èÍý¤ò¼«Á°¤Ç¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¥¥ã¥ó¥»¥ëµ¡Ç½¤òÍøÍѤ¹¤ë¤¿¤á¤Ë¤Ï CancellationToken ·¿¤ÎÃͤ¬É¬Íפˤʤê¤Þ¤¹¤Î¤Ç¡¢
°ú¿ô¤òÍøÍѤ·¤ÆÌ¿Îḵ¤«¤é CancellationToken ·¿¤ÎÃͤò¼èÆÀ¤·¡¢¤³¤Î¥á¥½¥Ã¥ÉÆâ¤Ç¼Â¹Ô¤µ¤ì¤ë await ½èÍý¤ËÂФ·¤Æ¥¥ã¥ó¥»¥ë½èÍý¤òµ½Ò¤Ç¤¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
¡¡¸½»þÅÀ¤Ç¤Ï await UniTask.Yield(token); ¤ÎÉôʬ¤ÇÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥Ç¡¼¥¿·¿¤È¤·¤ÆÊÑ¿ôÀë¸À¤·¤¿¾ì¹ç¡¢ SerializeField °À¤òÉÕÍ¿¤·¤Æ¤¤¤Æ¤â¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ë¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£
¤³¤ì¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤½¤Î¤â¤Î¤Î»ÅÍͤǤ¹¡£
¡¡
¡¡¼¡²ó¤Î¼ê½ç¤Ç¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ËÅÐÏ¿¤·¤¿¤ê¤·¤¿¤¤¤Î¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤»¤ëµ¡Ç½¤òÄɲä·¤Þ¤¹¡£
¡¡ÌµÎÁ¥¢¥»¥Ã¥È¤Ç¤¢¤ë Serializable Interface ¥¢¥»¥Ã¥È¤ò Unity ¤Ë¥¤¥ó¥Ý¡¼¥È¤·¡¢¤½¤Á¤é¤Îµ¡Ç½¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥Ç¡¼¥¿·¿¤È¤·¤ÆºîÀ®¤·¤¿ÊÑ¿ô¤ò¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡²¼µ¤Î Github Æâ¤Î¥Ú¡¼¥¸¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¤Æ Unity ¤Ë¥¤¥ó¥Ý¡¼¥È¤·¤Æ¤¯¤À¤µ¤¤¡£
Github
Thundernerd/Unity3D-SerializableInterface
https://github.com/Thundernerd/Unity3D-Serializabl...
¡¡¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤ë¤È¥Õ¥©¥ë¥À¤¬Äɲ䵤ì¤Þ¤¹¡£
Propject ¥Õ¥©¥ë¥ÀÆâ

»²¹Í¥µ¥¤¥È
¥³¥¬¥Í¥Ö¥í¥° ÍÍ
¡ÚUnity¡ÛMonoBehaviour ¤Î»²¾È¤ò Interface ¤Ç Inspector ¤ËÀßÄê¤Ç¤¤ë¡ÖSerializable Interface¡×¾Ò²ð
¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£
°ú¤Â³¤¼¡¤Î¼ê½ç¤Ë¤Æ½èÍý¤ò´°À®¤µ¤»¤Þ¤¹¡£
¡¡¼¡¤Î¼ê½ç¤Ï¡¡½èÍý¤ÎÃê¾Ý²½¤Ë¤è¤ë¼ÂÁõÎ㦡¡¤Ç¤¹¡£
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯