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

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



»Ò¥¯¥é¥¹¤ÎºîÀ®


¡¡¤³¤Á¤é¤âº£¤Þ¤ÇºîÀ®¤·¤¿»Ò¥¯¥é¥¹¤ÏÍøÍѲÄǽ¤Ç¤¹¤Î¤Ç¡¢¸½ºß¤Î½èÍý¤ËÄɵ­¤·¡¢
¥á¥½¥Ã¥É¤Î¼Â¹ÔÊýË¡¤ò¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î¾ì¹ç¤È UniTask ¤Ë¤è¤ë¾ì¹ç¤ÎξÊý¤òµ­ºÜ¤·¤Þ¤¹¡£

¡¡¿Æ¥¯¥é¥¹¤È¤·¤Æ GameEventBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢¤³¤Î»Ò¥¯¥é¥¹¼«ÂΤˤâ MonoBehaviour ¥¯¥é¥¹¤Îµ¡Ç½¤ò¼ÂÁõ½ÐÍè¤Þ¤¹¡£

¡¡¿Æ¥¯¥é¥¹¤Ë¤ÆÄêµÁ¤·¤Æ¤¤¤ë²¾ÁÛ(virtual)¥á¥½¥Ã¥É¤ò override ¤·¤Æ¤Î»Ò¥¯¥é¥¹¤Ë¤ÆÍøÍѤ¹¤ë¾ì¹ç¡¢
½¤¾þ»Ò¤ÏƱ¤¸½¤¾þ»Ò¤ÇÀë¸À¤·¤Þ¤¹¡£º£²ó¤Ç¤¢¤ì¤Ð¡¢¿Æ¥¯¥é¥¹¤Î ExecuteEventCoroutine ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤¿¤á¡¢
Ʊ¤¸ public ½¤¾þ»Ò¤Ë¤ÆÀë¸À¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î ExecuteEventAsync ¥á¥½¥Ã¥É¤Ï IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ç¤¢¤ê¡¢
¿Æ¥¯¥é¥¹¤Ç¤¢¤ë GameEventBase Æâ¤Ç¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£º£²ó¤Ï ExecuteEventAsync ¥á¥½¥Ã¥É¤ò²¾ÁÛ(virtual)¥á¥½¥Ã¥É¤È¤·¤ÆºîÀ®¤·¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
º£¤Þ¤Ç¤Î¥³¥ë¡¼¥Á¥ó¤Î ExecuteEventCoroutine ¥á¥½¥Ã¥É¤ÈƱ¤¸¤è¤¦¤Ë³Æ»Ò¥¯¥é¥¹¤Ç¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¼ÂÁõ¤·¡¢¿¶¤ëÉñ¤¤¤òÊѤ¨¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£


²ñÏÃ¥¤¥Ù¥ó¥ÈÍÑ


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


¡¡µ­½Ò¤ÎÊýË¡¤¬°Û¤Ê¤ê¤Þ¤¹¤¬¡¢½èÍý¤ÎÆâÍƼ«ÂΤÏƱ¤¸¤Ç¤¹¡£

¡¡¤Þ¤¿¥³¥ë¡¼¥Á¥ó¤Î¥á¥½¥Ã¥É¤È°ã¤¤¡¢UniTask ¤Ë¤ÏÌá¤êÃͤÎÀßÄ꤬¤Ç¤­¤Þ¤¹¡£


Ì¿Îá¤ò¼õ¤±¤ë¦¤Îµ¡Ç½¤ÎºîÀ®


¡¡¤³¤ÎÉôʬ¤Î½èÍý¤Îή¤ì¤â¤¤¤Þ¤Þ¤Ç¤ÈƱ¤¸¤Ç¤¹¡£
¥Õ¥¡¥ß¥³¥ó¤Ç¤¢¤ì¤Ð¡¢¥½¥Õ¥È¤Î¼ïÎà¤ÏÃΤé¤Ê¤¤¤â¤Î¤Î¡¢¥Õ¥¡¥ß¥³¥ó¤Î¥½¥Õ¥È¤Ç¤¢¤ì¤Ðµ¯Æ°¤Ï¤¹¤ë¤È¤¤¤¦¥¤¥á¡¼¥¸¤Ç¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤Î¥¯¥é¥¹¤Î¥¢¥¿¥Ã¥ÁÀè¤âƱ¤¸¤Ç¤¹¡£

¡¡¤¿¤À¤·¡¢¼Â¹Ô¤¹¤ëÊÑ¿ô¤Î·¿¤¬ GameEventBase ¥¯¥é¥¹¤Ç¤Ï¤Ê¤¯¡¢IGameEvent ·¿¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¢¤ì¤Ð¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë½èÍý¤òÄɲ䷤Ƥޤ¹¡£
¤½¤ì°Ê³°¤ÏƱ¤¸¤Ç¡¢GameEventHandler ¥¯¥é¥¹¤Ç¤Ï¼Â¹Ô¤¹¤ë GameEvent ¤Î¼ïÎà¤ÏÆÃÄꤷ¤Þ¤»¤ó¡£
º£¤Þ¤Ç¤ÈƱ¤¸¤è¤¦¤Ë¡¢º£²ó¤Ï ExecuteEventAsync ¥á¥½¥Ã¥É¤Î¿¶¤ëÉñ¤¤¤òÊѤ¨¤Æ¼Â¹Ô¤µ¤»¤Þ¤¹¡£

¡¡UniTask ¤òÍøÍѤ¹¤ë¤¿¤á¡¢¤ª¤è¤Ó¡¢Á°²ó¥¤¥ó¥Ý¡¼¥È¤·¤¿ Serializable Interface ¥¢¥»¥Ã¥È¤òÍøÍѤ¹¤ë¤¿¤á¡¢using ¤Ë£³¤Ä¤ÎÀë¸À¤òÄɲä·¤Þ¤¹¡£


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


¡¡¤¹¤Ç¤Ë GameEventHandler ¥¯¥é¥¹¤¬¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¤Î¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
SerializableInterface<IGameEvent> ·¿¤ÇÀë¸À¤·¤¿ GameEventInterface ÇÛÎóÊÑ¿ô¤¬¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£


¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü



¡¡¤³¤ÎÉôʬ¤Ë¡¢º£¤Þ¤Ç¥¢¥µ¥¤¥ó¤·¤Æ¤¤¤¿ GameEventBase ¤ÎÂå¤ï¤ê¤Ë IGameEvent ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤ò¥¢¥µ¥¤¥ó¤·¤Æ¥¤¥Ù¥ó¥È¤ò¼Â¹Ô¤µ¤»¤Þ¤¹¡£

¡¡½èÍý¤Î¼Â¹ÔÆâÍƤȤ·¤Æ¤ÏƱ¤¸Î®¤ì¤Ç¤¹¤¬¡¢¼Â¹Ô¤¹¤ë¤Þ¤Ç¤Î½èÍý¤Îµ­½ÒÊýË¡¤¬ÊѤï¤ë¡¢¤È¤¤¤¦·Á¤Ë¤Ê¤ê¤Þ¤¹¡£


UniTask ¤Î¥­¥ã¥ó¥»¥ë½èÍý


¡¡°ÊÁ°¤Ë¤â¤ªÅÁ¤¨¤·¤Æ¤¤¤ë¤è¤¦¤Ë¡¢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

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

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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