i-school - ¥³¥ë¡¼¥Á¥ó¤Ë¤è¤ëÈóƱ´ü½èÍý¤ò UniTask ¤ò»È¤Ã¤¿ÈóƱ´ü½èÍý¤ËÃÖ¤­´¹¤¨¤ë¼ÂÁõÎã
¡¡Ê¬³ä¤·¤¿¥¯¥é¥¹Æâ¤Ë¤¢¤ë¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ë¤Ä¤¤¤Æ¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡Á°Ãʳ¬¤Î³Ø½¬¤È¤·¤Þ¤·¤Æ¡¢²¼µ­¤Îµ­»ö¤Î³Ø½¬¤ò¤ª´ê¤¤Ãפ·¤Þ¤¹¡£

¡¡¡¡¡¡=>¡¡ÈîÂç²½¤·¤¿¥¯¥é¥¹Æâ¤Î½èÍý¤ò¡¢Ìò³ä¤Ë±þ¤¸¤¿¥¯¥é¥¹¤òÊ£¿ôºîÀ®¤·¤Æʬ³ä¤¹¤ë¼ÂÁõÎã

¡¡¤Þ¤¿¤³¤Îµ­»ö¤Ï¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤¬ÌÜŪ¤Ç¤¢¤ë¤¿¤á¡¢UniTask ¼«ÂΤξܺ٤ÊÀâÌÀ¤Ï´Þ¤Þ¤ì¤Æ¤¤¤Þ¤»¤ó¡£
»öÁ°¤ËÊ̤ε­»ö¤ä¾¤Î¥µ¥¤¥È¤Îµ­»ö¤ò»²¹Í¤·¤Æ»öÁ°³Ø½¬¤ò¤ª´ê¤¤Ãפ·¤Þ¤¹¡£



Àß·×


¡¡¥³¥ë¡¼¥Á¥ó¤Î¼Â¹ÔÌ¿Îá¤Ç¤¢¤ë StartCoroutine ¥á¥½¥Ã¥É¤Ï MonoBehaviour¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Ç¤Î¤ßÍøÍѤǤ­¤Þ¤¹¡£
¤½¤Î¤¿¤á¥³¥ë¡¼¥Á¥ó¤Ï¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸Â¸´ü´Ö¤Ë°Í¸¤¹¤ëÈóƱ´ü½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
²¿¸Î¤Ê¤é¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î¤¢¤ë¥¹¥¯¥ê¥×¥È¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤ÆÍøÍѤ¹¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢
¤½¤Î¥¢¥¿¥Ã¥Á¤·¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤¿¥¿¥¤¥ß¥ó¥°¤Ç¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î½èÍý¤âÄä»ß¤·¤Þ¤¹¡£
¡¡
¡¡Unity ¤Ç¤Ï UniTask ¤Ë¤è¤ê¡¢async / await ¤Ë¤è¤ëÈóƱ´ü½èÍý¤¬¼ÂÁõ²Äǽ¤Ç¤¹¡£
¤³¤Á¤é¤Ï¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ÎÀ¸Â¸´ü´Ö¤Ë¤Ï°Í¸¤·¤Þ¤»¤ó¤¬¡¢¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤Æ¤â¼«Æ°Åª¤Ë½èÍý¤ÏÄä»ß¤·¤Þ¤»¤ó¡£
Àµ¤·¤¤½ñ¤­Êý¤òÍý²ò¤·¤Æ¥í¥¸¥Ã¥¯¤òÁȤळ¤È¤¬½ÐÍè¤ì¤Ð¡¢¥³¥ë¡¼¥Á¥ó¤è¤ê¤â½ÀÆð¤Ê½èÍý¤¬µ­½Ò¤Ç¤­¤Þ¤¹¡£

¡¡¤É¤Á¤é¤Î½èÍý¤Î½ñ¤­Êý¤â³Ð¤¨¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢¥½¡¼¥¹¥³¡¼¥É¤Îµ­½Ò¤ÎÉý¤¬¹­¤¬¤ê¤Þ¤¹¡£
º£²ó¤ÏÁ°²ó¤ÎÈîÂç²½¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Îʬ³ä¤ò¥Ù¡¼¥¹¤Ë¡¢¥³¥ë¡¼¥Á¥ó¤Î½èÍý¤ò UniTask ¤òÍøÍѤ·¤¿ÈóƱ´ü½èÍý¤ËÊѹ¹¤·¤Þ¤¹¡£


ʬ³äÁ°¤Î¥¯¥é¥¹


¡¡²¼µ­¤Ïº£²ó¤Î¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÇÍøÍѤ¹¤ë¥½¡¼¥¹¥³¡¼¥É¤Ç¤¹¡£
°ÊÁ°¤Î³Ø½¬¤Çʬ³ä¤¹¤ëºÝ¤ËÍøÍѤ·¤¿¥½¡¼¥¹¥³¡¼¥É¤ÈƱ¤¸¤â¤Î¤òÍøÍѤ·¤Þ¤¹¡£


PlayerController.cs

<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



¥¯¥é¥¹Ê¬³ä¤Ë¤è¤ëÌò³ä¤Î¹Í¤¨Êý


¡¡¤³¤ì¤âÁ°Ãʳ¬¤ÈƱ¤¸¹Í¤¨Êý¤Ç¤¹¤Î¤Ç¡¢¤³¤³¤Ç¤Ï³ä°¦¤·¤Þ¤¹¡£

¡¡³Ø½¬¤È¤·¤Æ¤Ï¡¢Ê¬³ä¤·¤¿³Æ¥¯¥é¥¹Æâ¤Ë¤¢¤ë¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤ò UniTask ¤òÍøÍѤ·¤¿ async / await ¤Î½èÍý¤Ë¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤¤¤Þ¤¹¡£


¿Æ¥¯¥é¥¹¤òºîÀ®¤¹¤ë


¡¡¤³¤Î¥¯¥é¥¹¤Ë¤ÏÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£


<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



»Ò¥¯¥é¥¹¤òºîÀ®¤¹¤ë

£±¡¥PlayerMove.cs


¡¡¤³¤Î¥¯¥é¥¹¤Ë¤ÏÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£

<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



£²¡¥PlayerAnimation.cs


¡¡¤³¤Î¥¯¥é¥¹¤Ë¤ÏÊѹ¹¤Ï¤¢¤ê¤Þ¤»¤ó¡£


<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



£³¡¥PlayerAction.cs


¡¡¤³¤Î¥¯¥é¥¹¤Ë¤Ï¥³¥ë¡¼¥Á¥ó¤òÍøÍѤ·¤¿¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢
¿·¤·¤¤¥á¥½¥Ã¥É¤òºîÀ®¤·¤¿¾å¤Ç¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤Ã¤ÆÈóƱ´ü½èÍý¤òÃÖ¤­´¹¤¨¤Þ¤¹¡£


<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£


¡¡async / await ¤Ë¤è¤ëÈóƱ´ü½èÍýÍѤΥ᥽¥Ã¥É¤Ï¡¢Ìá¤êÃͤò UniTask ·¿¤Ë¤·¤Þ¤¹¡£
¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤È°ã¤¤¡¢Ìá¤êÃͤˤÏǤ°Õ¤Î¾ðÊó¤ò»ý¤¿¤»¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£UniTask<int> ¤Î¤è¤¦¤Ë½ñ¤±¤Þ¤¹¡£

¡¡²Ã¤¨¤Æ¡¢¥á¥½¥Ã¥É¤ÎÄêµÁ¤Ë¤Ï async ¥­¡¼¥ï¡¼¥É¤òÉÕÍ¿¤·¤Þ¤¹¡£
¥á¥½¥Ã¥É̾¤Ï¤ï¤«¤ê¤ä¤¹¤¤¤è¤¦¤Ë ¡Á Async ¤Ç½ª¤ï¤ë¤è¤¦¤Ë¤·¡¢ÈóƱ´üÍѤΥ᥽¥Ã¥É¤Ç¤¢¤ë¤³¤È¤¬¤ï¤«¤ë¤è¤¦¤Ë̿̾¤·¤Þ¤¹¡£
º£²ó¤Ç¤¢¤ì¤Ð PlayActionAsync ¤È¤·¤Æ¤¤¤Þ¤¹¡£

¡¡await ¥­¡¼¥ï¡¼¥É¤òÀèƬ¤Ë¤Ä¤±¤ë¤³¤È¤Ç¡¢ÈóƱ´ü½èÍý¤ò¼Â¹Ô¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤Ï yield return ÉդΠStartCoroutine ¤ÈƱ¤¸Ìò³ä¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢ÈóƱ´ü½èÍý¤¬´°Î»¤¹¤ë¤Þ¤Ç¼¡¤Î½èÍý¤Ë¤Ï°Ü¹Ô¤·¤Þ¤»¤ó¡£

¡¡¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Ë¤è¤ëÈóƱ´ü½èÍý¤Ï¼Â¹Ô¤·¤Æ¤¹¤°¤Ë¼¡¤Î½èÍý¤Ë°Ü¹Ô¤·¤Þ¤·¤¿¤¬¡¢
async / await ¤Ë¤è¤ëÈóƱ´ü½èÍý¤ÏÂÔµ¡¤¹¤ë¤³¤È¤¬Á°Äó¤Ë¤Ê¤Ã¤Æ¤¤¤ëÈóƱ´ü½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£


£´¡¥EventChecker.cs


¡¡¤³¤Î¥¯¥é¥¹¤ÏÊѹ¹¤¢¤ê¤Þ¤»¤ó¡£


<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



£µ¡¥PlayerManager.cs


¡¡¤³¤Î¥¯¥é¥¹¤Ë¤ÏÈóƱ´ü½èÍý¤¬¤¿¤¯¤µ¤ó¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢Â礭¤ÊÊѹ¹¤¬¤¢¤ê¤Þ¤¹¡£


<= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£



Forget ¥á¥½¥Ã¥É


¡¡ÈóƱ´ü½èÍý°Ê³°¤Î¥á¥½¥Ã¥ÉÆâ¤Ç await ¤Î¤Ê¤¤ÈóƱ´ü½èÍý¤ò¼Â¹Ô¤¹¤ë¤È·Ù¹ð¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£
¤½¤Î¾ì¹ç¤Ë¤Ï¡¢Forget ¥á¥½¥Ã¥É¤òÄɲ乤뤳¤È¤Ç¡¢ÂÔµ¡¤Î¤Ê¤¤ÈóƱ´ü½èÍý(½¾Íè¤Î¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É)¤È¤·¤Æ¼Â¹Ô¤¹¤ë¤³¤È¤¬²Äǽ¤Ë¤Ê¤ê¤Þ¤¹¡£


Update ¥á¥½¥Ã¥ÉÆâ
  if (Input.GetButtonDown("Action")) {

      // ¥×¥ì¥¤¥ä¡¼¤Î¸þ¤¤¤Æ¤¤¤ëÊý¸þ¤Ë¤¢¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ¥¢¥¯¥·¥ç¥ó¤Ç¤­¤ë¤«È½Äê
      PrepareJedgeAction().Forget();
  }

¡¡Forget ¥á¥½¥Ã¥É¤òÄɲ䷤Ƥ¤¤ë½èÍý¤ÏÂÔµ¡¤»¤º¤Ë¡¢¼¡¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£


¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤¹¤ë


¡¡¥¹¥¯¥ê¥×¥È¤Î¥¢¥¿¥Ã¥ÁÀè¤Ê¤É¤ÏÊѤï¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¥½¡¼¥¹¥³¡¼¥É¤Î½¤Àµ¤¬½ªÎ»¤·¤¿¤é¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤Ï´°À®¤Ç¤¹¡£

¡¡¤É¤ÎÉôʬ¤ò½¤Àµ¤·¤Æ¤¤¤ë¤Î¤«¡¢½èÍý¤Î¸«Ä¾¤·¤ò¤·¤¿¾å¤Ç¡¢¤¤¤Þ¤Þ¤Ç¤ÈƱ¤¸¤è¤¦¤Ë½èÍý¤¬Æ°ºî¤¹¤ë¤«¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£