ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ10·î12Æü(ÌÚ) 09:59:13ÍúÎò
¡¡¤³¤Á¤é¤âº£¤Þ¤ÇºîÀ®¤·¤¿»Ò¥¯¥é¥¹¤ÏÍøÍѲÄǽ¤Ç¤¹¤Î¤Ç¡¢¸½ºß¤Î½èÍý¤ËÄɵ¤·¡¢
¥á¥½¥Ã¥É¤Î¼Â¹ÔÊýË¡¤ò¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î¾ì¹ç¤È UniTask ¤Ë¤è¤ë¾ì¹ç¤ÎξÊý¤òµºÜ¤·¤Þ¤¹¡£
¡¡¿Æ¥¯¥é¥¹¤È¤·¤Æ GameEventBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤Î»Ò¥¯¥é¥¹¼«ÂΤˤâ MonoBehaviour ¥¯¥é¥¹¤Îµ¡Ç½¤ò¼ÂÁõ½ÐÍè¤Þ¤¹¡£
¡¡¿Æ¥¯¥é¥¹¤Ë¤ÆÄêµÁ¤·¤Æ¤¤¤ë²¾ÁÛ(virtual)¥á¥½¥Ã¥É¤ò override ¤·¤Æ¤Î»Ò¥¯¥é¥¹¤Ë¤ÆÍøÍѤ¹¤ë¾ì¹ç¡¢
½¤¾þ»Ò¤ÏƱ¤¸½¤¾þ»Ò¤ÇÀë¸À¤·¤Þ¤¹¡£º£²ó¤Ç¤¢¤ì¤Ð¡¢¿Æ¥¯¥é¥¹¤Î ExecuteEventCoroutine ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤¿¤á¡¢
Ʊ¤¸ public ½¤¾þ»Ò¤Ë¤ÆÀë¸À¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î ExecuteEventAsync ¥á¥½¥Ã¥É¤Ï IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ç¤¢¤ê¡¢
¿Æ¥¯¥é¥¹¤Ç¤¢¤ë GameEventBase Æâ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£º£²ó¤Ï ExecuteEventAsync ¥á¥½¥Ã¥É¤ò²¾ÁÛ(virtual)¥á¥½¥Ã¥É¤È¤·¤ÆºîÀ®¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
º£¤Þ¤Ç¤Î¥³¥ë¡¼¥Á¥ó¤Î ExecuteEventCoroutine ¥á¥½¥Ã¥É¤ÈƱ¤¸¤è¤¦¤Ë³Æ»Ò¥¯¥é¥¹¤Ç¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¼ÂÁõ¤·¡¢¿¶¤ëÉñ¤¤¤òÊѤ¨¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¡¡¤³¤ÎÉôʬ¤Î½èÍý¤Îή¤ì¤â¤¤¤Þ¤Þ¤Ç¤ÈƱ¤¸¤Ç¤¹¡£
¥Õ¥¡¥ß¥³¥ó¤Ç¤¢¤ì¤Ð¡¢¥½¥Õ¥È¤Î¼ïÎà¤ÏÃΤé¤Ê¤¤¤â¤Î¤Î¡¢¥Õ¥¡¥ß¥³¥ó¤Î¥½¥Õ¥È¤Ç¤¢¤ì¤Ðµ¯Æ°¤Ï¤¹¤ë¤È¤¤¤¦¥¤¥á¡¼¥¸¤Ç¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤Î¥¯¥é¥¹¤Î¥¢¥¿¥Ã¥ÁÀè¤âƱ¤¸¤Ç¤¹¡£
¡¡¤¿¤À¤·¡¢¼Â¹Ô¤¹¤ëÊÑ¿ô¤Î·¿¤¬ GameEventBase ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢IGameEvent ·¿¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¢¤ì¤Ð¼Â¹Ô¤Ç¤¤ë¤è¤¦¤Ë½èÍý¤òÄɲ䷤Ƥޤ¹¡£
¤½¤ì°Ê³°¤ÏƱ¤¸¤Ç¡¢GameEventHandler ¥¯¥é¥¹¤Ç¤Ï¼Â¹Ô¤¹¤ë GameEvent ¤Î¼ïÎà¤ÏÆÃÄꤷ¤Þ¤»¤ó¡£
º£¤Þ¤Ç¤ÈƱ¤¸¤è¤¦¤Ë¡¢º£²ó¤Ï ExecuteEventAsync ¥á¥½¥Ã¥É¤Î¿¶¤ëÉñ¤¤¤òÊѤ¨¤Æ¼Â¹Ô¤µ¤»¤Þ¤¹¡£
¡¡UniTask ¤òÍøÍѤ¹¤ë¤¿¤á¡¢¤ª¤è¤Ó¡¢Á°²ó¥¤¥ó¥Ý¡¼¥È¤·¤¿ Serializable Interface ¥¢¥»¥Ã¥È¤òÍøÍѤ¹¤ë¤¿¤á¡¢using ¤Ë£³¤Ä¤ÎÀë¸À¤òÄɲä·¤Þ¤¹¡£
¡¡¤¹¤Ç¤Ë GameEventHandler ¥¯¥é¥¹¤¬¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¤Î¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
SerializableInterface<IGameEvent> ·¿¤ÇÀë¸À¤·¤¿ GameEventInterface ÇÛÎóÊÑ¿ô¤¬¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡¤³¤ÎÉôʬ¤Ë¡¢º£¤Þ¤Ç¥¢¥µ¥¤¥ó¤·¤Æ¤¤¤¿ GameEventBase ¤ÎÂå¤ï¤ê¤Ë IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤ò¥¢¥µ¥¤¥ó¤·¤Æ¥¤¥Ù¥ó¥È¤ò¼Â¹Ô¤µ¤»¤Þ¤¹¡£
¡¡½èÍý¤Î¼Â¹ÔÆâÍƤȤ·¤Æ¤ÏƱ¤¸Î®¤ì¤Ç¤¹¤¬¡¢¼Â¹Ô¤¹¤ë¤Þ¤Ç¤Î½èÍý¤Îµ½ÒÊýË¡¤¬ÊѤï¤ë¡¢¤È¤¤¤¦·Á¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡°ÊÁ°¤Ë¤â¤ªÅÁ¤¨¤·¤Æ¤¤¤ë¤è¤¦¤Ë¡¢UniTask (async / await)¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ëɳ¤Å¤¤¤Æ¤¤¤Þ¤»¤ó¡£
ÈóƱ´ü½èÍý¤Î¼Â¹Ô¤Ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿¤È¤·¤Æ¤â¡¢ÈóƱ´ü½èÍý¼«ÂΤÏÄä»ß¤»¤º¡¢Æ°¤Â³¤±¤Þ¤¹¡£
¤è¤Ã¤Æ¡¢UniTask ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤Ë¤ª¤¤¤Æ¤Ï¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ê¤É¤ËÈóƱ´ü½èÍý¤òÄä»ß¤µ¤»¤ë½èÍý¤ò»Ü¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¡¡¤¤¤¯¤Ä¤«ÊýË¡¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ëɳ¤Å¤¤¤Æ¤¤¤ë¥¥ã¥ó¥»¥ë¤Îµ¡Ç½¤âÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
GetCancellationTokenOnDestroy ¥á¥½¥Ã¥É¤¬¤½¤Îµ¡Ç½¤Ë¤¢¤¿¤ê¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤Ç¥¥ã¥ó¥»¥ë½èÍýÍѤΠCancellationToken ¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£
²¿²ó¤«ÍøÍѤ¹¤ë¾ì¹ç¤Ë¤ÏÊÑ¿ô¤ËÂåÆþ¤·¤Æ¤ª¤¡¢³ÆÈóƱ´ü½èÍý¤Î¼Â¹Ô¥¿¥¤¥ß¥ó¥°¤Ç°ú¿ô¤È¤·¤Æ CancellationToken ¤òÅϤ¹¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡¤³¤Î GetCancellationTokenOnDestroy ¤ÇºîÀ®¤µ¤ì¤¿ CancellationToken ¤Ï¼«Æ°Åª¤Ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤Î¥¿¥¤¥ß¥ó¥°¤Ëɳ¤Å¤¤¤Æ¤¤¤ë¤¿¤á¡¢
OnDestroy ¥á¥½¥Ã¥É¤Ê¤É¤Ç¼êÆ°¤ÇÈóƱ´ü½èÍý¤ÎÄä»ß½èÍý¤òµ½Ò¤·¤Ê¤¯¤Æ¤â¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇË´þ¤ÈƱ»þ¤ËÈóƱ´ü½èÍý¤òÄä»ß¤·¤Æ¤¯¤ì¤ëµ¡Ç½¤Ç¤¹¡£
¡¡// NPC ¤Î MonoBehaviour ¤Ëɳ¤Å¤¯¥¥ã¥ó¥»¥ë¥È¡¼¥¯¥óºîÀ® var token = this.GetCancellationTokenOnDestroy();
¡¡ÈóƱ´ü½èÍý¤ò¼Â¹Ô¤¹¤ë¾ì¹ç¤Ë¤Ï¡¢É¬¤º CancellationToken ¤òÀßÄꤹ¤ë¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£
»²¹Í¥µ¥¤¥È
Light11 ÍÍ
¡ÚUnity¡ÛUniTask¤Î¥¥ã¥ó¥»¥ë½èÍý¤Þ¤È¤á¡¦Task¤È¤ÎÈæ³Ó
¡¡¤¹¤Ç¤ËºîÀ®ºÑ¤Î¤â¤Î¤¬¤¢¤ì¤Ð¤½¤ì¤ò¤½¤Î¤Þ¤ÞÍøÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
¡¡
¡¡GameEventHandler ¥¯¥é¥¹¤È¡¢²ñÏÃ¥¤¥Ù¥ó¥ÈÍѤΠGameEventNpcTalk ¥¯¥é¥¹¤ò NPC ÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
»Ò¥¯¥é¥¹¤¬·Ñ¾µ¤·¤Æ¤¤¤ë¿Æ¥¯¥é¥¹¤Ï¥¢¥¿¥Ã¥Á¤¹¤ëɬÍפϤʤ¯¡¢»Ò¥¯¥é¥¹¤Î¤ß¤ò¥¢¥¿¥Ã¥Á¤¹¤ì¤ÐÌäÂꤢ¤ê¤Þ¤»¤ó¡£¼«Æ°Åª¤Ë¿Æ¥¯¥é¥¹¤Îµ¡Ç½¤â¼ÂÁõ¤µ¤ì¤Þ¤¹¡£
¡¡GameEventHandler ¥¯¥é¥¹¤¬¥¤¥Ù¥ó¥È¤ò´ÉÍý¤·¤Þ¤¹¤Î¤Ç¡¢GameEventInterface ÊÑ¿ô¤Ë GameEventNpcTalk ¥¯¥é¥¹(¤³¤Î NPC ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤½¤Î¤â¤Î)¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡¤³¤ì¤Ç¥¤¥Ù¥ó¥È¤¬È¯²Ð(¼Â¹Ô¤µ¤ì¤¿)¤·¤¿¤È¤¡¢GameEventInterface ÊÑ¿ô¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë GameEventNpcTalk ¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(¥¢¥µ¥¤¥óÁ°)

¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(¥¢¥µ¥¤¥ó¸å)

¡¡¤¹¤Ç¤ËºîÀ®ºÑ¤Ç¤Î¥×¥ì¥¤¥ä¡¼ÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë PlayerController ¥¯¥é¥¹¡¢
¤¢¤ë¤¤¤Ïʬ³ä¤·¤¿ PlayerAction ¥¯¥é¥¹¤È PlayerManager ¥¯¥é¥¹¤ËÈóƱ´üÍѤΥ᥽¥Ã¥É¤òÄɲä·¤Þ¤¹¡£
¡¡ºÇ½é¤Ë PlayerController ¥¯¥é¥¹¤Î½¤Àµ¤Ç¤¹¡£
¥³¥ë¡¼¥Á¥ó¤ÎÈóƱ´ü½èÍý¤ÈƱ¤¸µ¡Ç½¤ò»ý¤Ä¡¢UniTask ÍѤÎÈóƱ´ü½èÍý¤òÄɲä·¤Þ¤¹¡£
¡¡ÄɲÃÆâÍƤ¬Â¿¤¤¤Î¤Ç¡¢½èÍý¤ò¤·¤Ã¤«¤ê¤ÈÆɤ߲ò¤¤¤Æή¤ì¤òÇÄ°®¤·¤Æ¤¯¤À¤µ¤¤¡£
PlayerController.cs
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯