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

¡¡¥×¥í¥°¥é¥à¤Î³Ø½¬¤Ë¤ª¤¤¤Æ¡¢ºÇ½é¤Î¤¦¤Á¤Ï£±¤Ä¤Î¥¯¥é¥¹Æâ¤Ë¿§¡¹¤Ê½èÍý¤ò½ñ¤¤¤Æ¤¤¤¯¥±¡¼¥¹¤¬¤Û¤È¤ó¤É¤Ç¤¹¡£
¶µºà¤ä¥Í¥Ã¥È¤Î¥µ¥¤¥È¤Ç¤â¿¤¯¤½¤¦¤¤¤Ã¤¿½ñ¼°¤¬¾Ò²ð¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

¡¡¥½¡¼¥¹¥³¡¼¥É¤ò½ñ¤¯¤³¤È¤Ë´·¤ì¤Æ¤­¤¿¤é¡¢¥¯¥é¥¹Æâ¤Î½èÍý¤òÌò³äñ°Ì¤Çʬ³ä¤·¤Æ¡¢Ê£¿ô¤Î¥¯¥é¥¹¤Ëʬ¤±¤ÆÌò³ä¤´¤È¤ËÀ©¸æ¤¹¤ëÊýË¡¤ò³Ø½¬¤·¡¢¼ÂÁ©¤·¤Þ¤·¤ç¤¦¡£



¡ã¿·¤·¤¤³Ø½¬ÆâÍÆ¡ä
¡¡¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
¡¡¡¦¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¼ÂÁõ¤È¥á¥½¥Ã¥É¤Î¥ª¡¼¥Ð¡¼¥é¥¤¥É½èÍý
¡¡¡¦¥×¥í¥Ñ¥Æ¥£¤ÎÍý²ò¤ò¿¼¤á¤ë



¥±¡¼¥¹¥¹¥¿¥Ç¥£


¡¡¤è¤¯¤¢¤ë¥±¡¼¥¹¤È¤·¤Æ¡¢CharaController ¥¯¥é¥¹¤ä GameManager ¥¯¥é¥¹¤ÎÈîÂç²½¤¬¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤ì¤Ï»ÅÊý¤Î¤Ê¤¤Éôʬ¤Ç¤â¤¢¤ê¤Þ¤¹¡£Æä˽鿴¼Ô¤Î¾ì¹ç¤ä¡¢¥×¥í¥°¥é¥à¤Ë´·¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢
Ê£¿ô¤Î¥¯¥é¥¹¤Ë½èÍý¤ò½ñ¤¯¤³¤È¤Ë¤è¤Ã¤Æ½èÍý¤òÆɤ߲ò¤¯¤³¤È¤¬Æñ¤·¤¯¤Ê¤ë¤¿¤á¡¢ºÇ½é¤Î¤¦¤Á¤Ï£±¤Ä¤Î¥¯¥é¥¹¤Ë½¸Ì󤷤Ƥ¤¤¯¤³¤È¤¬Â¿¤¤¤Ç¤¹¡£

¡¡¤Ç¤¹¤¬¡¢¤º¤Ã¤È¤½¤Î¼êË¡¤·¤«ÃΤé¤Ê¤¤¤È¡¢¥¯¥é¥¹¤ÎÀß·×ÊýË¡¤ä¡¢¥½¡¼¥¹¥³¡¼¥É¤ò½ñ¤¯¥¹¥­¥ë¤Î¥¹¥Æ¥Ã¥×¥¢¥Ã¥×¤¬½ÐÍè¤Þ¤»¤ó¡£

¡¡¤³¤³¤Ç¤Ï£±¤Ä¤Î¥¯¥é¥¹¤Ë½ñ¤¤¤¿½èÍý¤òµ¡Ç½Ê̤Ëʬ¤±¤Æ¡¢Ê£¿ô¤Î¥¯¥é¥¹¤Ëʬ³ä¤·¡¢À©¸æ¤·¤Æ¤¤¤¯ÊýË¡¤ò¼ÂÁ©¤·¤Æ³Ø½¬¤·¤Þ¤·¤ç¤¦¡£
¡¡
¡¡¼ÂºÝ¤Ë£±¤Ä¤Î¥¯¥é¥¹¤Ë¿§¡¹¤Ê½èÍý¤¬¤Þ¤È¤Þ¤Ã¤Æ¤¤¤ë¥½¡¼¥¹¥³¡¼¥É¤òÍøÍѤ·¡¢¥¯¥é¥¹¤Îʬ³ä¤ò¹Ô¤Ã¤Æ¤¤¤­¤Þ¤¹¡£


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


¡¡º£²ó¤Ï CharaController ¤òÎã¤Ë¡¢Ìò³ä¤´¤È¤Ë½èÍý¤òʬ³ä¤·¤Æ¹Í¤¨¤Æ¤ß¤Þ¤¹¡£


CharaController.cs

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




¡¡¥×¥ì¥¤¥ä¡¼Ìò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¹½À®¤Ï¡¢¼¡¤ÎÄ̤ê¤Ç¤¹¡£


¹½À®



¿Æ¥¯¥é¥¹¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(CharaController ¥¯¥é¥¹¤È¥³¥é¥¤¥À¡¼¡¢Rigidbody ¤¬°ì½ï¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤Þ¤¹)



»Ò¥¯¥é¥¹¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü(²èÁü¤È Animator ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤Þ¤¹)




½èÍý¤òÌò³ä¤Ë±è¤Ã¤Æ¹Í¤¨¤Æ¤ß¤ë


¡¡CharaController ¥¯¥é¥¹Æâ¤Ë¤Ï¡¢Â¿¤¯¤Î½èÍý¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤ì¤é¤Î½èÍý¤ò¡¢¤É¤¦¤¤¤Ã¤¿Ìò³ä¤ò²Ì¤¿¤·¤Æ¤¤¤ë¤Î¤«¡¢¤È¤¤¤¦´ÑÅÀ¤Çʬ³ä¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¤½¤Îʬ³ä¤·¤¿¤â¤Î¤¬Ìò³ä¤Î£±¤Ä¤È¤Ê¤ê¡¢Æ±»þ¤Ë¡¢£±¤Ä¤Î¥¯¥é¥¹¤È¤·¤ÆºîÀ®¤·¤Æ¤¤¤¯¡¢¤È¤¤¤¦Êý¸þÀ­¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿½èÍý¤ÎÆâÉô¤Ë¤Ï¡¢Ê£¿ô¤Î½èÍýÆâ¤Ç¶¦Ä̤ÇÍøÍѤ·¤Æ¤¤¤ë½èÍý¤â¸«¼õ¤±¤é¤ì¤Þ¤¹¡£
Î㤨¤Ð½½»ú¥­¡¼ÆþÎÏÃͤϰÜÆ°¤Î½èÍý¤È¡¢¥¢¥Ë¥á¤Î¸þ¤­¤Î½èÍý¤ÎξÊý¤ÇƱ¤¸Ãͤ¬ÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤¦¤¤¤Ã¤¿Éôʬ¤Ï¶¦Ä̤·¤Æ¤¤¤ëÉôʬ¤È¤·¤Æ¡¢Ê̤ÎÌò³ä(¶¦Ä̽èÍý¤ò¤Þ¤È¤á¤¿¥¯¥é¥¹)¤È¤·¤Æ¹Í¤¨¤Þ¤¹¡£

¡¡¤Ä¤Þ¤ê¡¢°ÜÆ°¤È¥¢¥Ë¥á¤Î½èÍý¤«¤é¤Ï¡Ö½½»ú¥­¡¼ÆþÎÏÃ͡פνèÍý¤Ï´Þ¤Þ¤Ê¤¤¤è¤¦¤Ë¤·¤Þ¤¹¡£
¤Ç¤Ï¡¢É¬ÍפÊÃͤϤɤ¦¤¹¤ë¤Î¤«¡¢¤È¤¤¤¦¤³¤È¤Ç¤¹¤¬¡¢¡Ö¶¦Ä̤ÇÍøÍѤ¹¤ë½èÍý¡×¤ò¤Þ¤È¤á¤¿Ìò³ä(¥¯¥é¥¹)¤òºî¤ê¡¢
¤½¤³¤«¤é¡Ö½½»ú¥­¡¼ÆþÎÏÃͤò¼õ¤±¼è¤Ã¤Æ¡×ÍøÍѤ¹¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£

¡¡¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹Æâ¤ÇƱ¤¸½èÍý¤ò½ñ¤¯¤Î¤Ç¤Ê¤¯¤Æ¡¢¶¦Ä̤·¤Æ¤¤¤ë¾ðÊó¤ò´ÉÍý¤·¤Æ¤¤¤ë¥¯¥é¥¹¤«¤é¼õ¤±¼è¤Ã¤ÆÍøÍѤ¹¤ë¡¢¤È¤¤¤¦¹Í¤¨Êý¤Ç¤¹¡£
¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¡¢½½»ú¥­¡¼ÆþÎϤνèÍý¤Ï¡¢¸Ä¡¹¤Î¥¯¥é¥¹¤Ë½ñ¤¯¤Î¤Ç¤Ï¤Ï¤Ê¤¯¡¢¶¦Ä̤·¤ÆÍøÍѤ¹¤ë¥¯¥é¥¹Æâ¤Î¤ß(£±¤Ä¤Î¥¯¥é¥¹)¤Ë½¸Ìó½ÐÍè¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¤Ë¤Ï¥á¥½¥Ã¥É¤Î°ú¿ô¤äÌá¤êÃͤòÍøÍѤ¹¤ë¤³¤È¤¬Â¿¤¤¤Ç¤¹¡£


¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÎÊý¸þÀ­


¡¡¥¯¥é¥¹¤òʬ³ä¤¹¤ë¤Ë¤¢¤¿¤Ã¤Æ¤Ï¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹µ¡Ç½¤òÍøÍѤ·¤Æ¡¢Ìò³ä(ÀÕ̳)¤Îʬ³ä¤ò¹Ô¤Ã¤Æ¤¤¤­¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢Ê¬³ä¤·¤ÆºîÀ®¤µ¤ì¤ë¥¯¥é¥¹¤Ï¡¢¤¹¤Ù¤Æ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë·Á¼°¤Ë¤·¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÃê¾Ý¥¯¥é¥¹¤ÈƱÍͤǡ¢¤½¤ìñÂΤǤϥ¤¥ó¥¹¥¿¥ó¥¹¤¬ºîÀ®¤Ç¤­¤Þ¤»¤ó¡£
¤¤¤º¤ì¤«¤Î¥¯¥é¥¹¤Ë¼ÂÁõ¤µ¤»¤ëÁ°Äó¤ÇÀ߷פò¹Ô¤¦µ¡Ç½¤Ë¤Ê¤ê¤Þ¤¹¡£



¡¡£±¤Ä¤Î¥¯¥é¥¹¤òÊ£¿ô¤Î¥¯¥é¥¹¤Ëʬ³ä¤¹¤ë¤Ë¤¢¤¿¤ê¡¢¥¯¥é¥¹Æâ¤Î½èÍý¤òµ¡Ç½Ê̤˻Åʬ¤±¤·¤Þ¤¹¡£
Î㤨¤Ð¡¢°ÜÆ°¤Î½èÍý¡¢¥¢¥Ë¥á¤Î½èÍý¡¢¤È¤¤¤¦É÷¤Ë¡¢¸½ºß¤Î CharaController ¥¯¥é¥¹¤Ë½ñ¤«¤ì¤Æ¤¤¤ë½èÍý¤òÌò³ä¤´¤È¤Ë¡¢ÊÑ¿ô¤È¥á¥½¥Ã¥É¤ò¥»¥Ã¥È¤Ë¤·¤Æʬ¤±¤Þ¤¹¡£

¡¡À߷פȼÂÁõ¤Ë¤¢¤¿¤ê¡¢Á´ÂΤÎÀ߷פ¬´°Î»¤·¤¿¤é¡¢¤Þ¤º¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤«¤é½çÈ֤˺îÀ®¤·¤Æ¤¤¤¯¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºîÀ®¤·¤¿¤é¡¢¤½¤ì¤ò¼ÂÁõ¤·¤¿ Chara ¡Á ¥¯¥é¥¹¤òºîÀ®¤·¡¢¤³¤ì¤ËÌò³ä¤´¤È¤Î½èÍý¤ò¤Þ¤È¤á¤Æ¤¤¤­¤Þ¤¹¡£


À߷ס¡¡¼Ìò³ä¤Î¹Í¤¨Êý¡¼


¡¡CharaController ¥¯¥é¥¹Æâ¤Î½èÍý¤òµ¡Ç½Ê̤Ëʬ¤±¤Æ¤ß¤Þ¤·¤ç¤¦¡£
²¼µ­¤Î¤è¤¦¤Ê»Åʬ¤±¤Ë¤è¤ëʬÎब¤Ç¤­¤ë¤È»×¤¤¤Þ¤¹¡£

¡¦°ÜÆ°¤µ¤»¤ëµ¡Ç½
¡¦¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò°ÜÆ°Êý¸þ¤ËƱ´ü¤µ¤»¤ëµ¡Ç½
¡¦¹¶·â¤¹¤ëµ¡Ç½
¡¦Hp ¤ò´ÉÍý¤¹¤ëµ¡Ç½
¡¦¥ì¥Ù¥ë¤È Exp ¤ò´ÉÍý¤¹¤ëµ¡Ç½

¡¡¤³¤Î¤¦¤Á¡¢°ÜÆ°¤µ¤»¤ë½èÍý¤È¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò°ÜÆ°Êý¸þ¤ËƱ´ü¤µ¤»¤ë½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥­¡¼ÆþÎϤÎÃͤòƱ¤¸¾ðÊó¤È¤·¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¶¦Ä̤¹¤ë½èÍý¤ò¤Þ¤È¤á¤¿¥¯¥é¥¹¤ò£±¤ÄºîÀ®¤·¡¢¤Þ¤¿¡¢¤³¤Î¥¯¥é¥¹¤Ç¡¢¤½¤ì°Ê³°¤Î¥¯¥é¥¹¤ò´ÉÍý¤·¤Þ¤¹¡£
¤Ä¤Þ¤ê¡¢´ÉÍý¼Ô(¥Þ¥Í¡¼¥¸¥ã¡¼)¤È¤Ê¤ë¥¯¥é¥¹¤ò¿·¤·¤¯ÍÑ°Õ¤·¡¢Â¾¤Îµ¡Ç½¤ò¤Þ¤È¤á¾å¤²¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£


¡ã¿·¤·¤¯ºî¤ë¡ä
¡¦°ÜÆ°¤µ¤»¤ëµ¡Ç½¤ò»ý¤Ä¥¯¥é¥¹
¡¦¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ò°ÜÆ°Êý¸þ¤ËƱ´ü¤µ¤»¤ëµ¡Ç½¤ò»ý¤Ä¥¯¥é¥¹
¡¦¹¶·â¤¹¤ëµ¡Ç½¤ò»ý¤Ä¥¯¥é¥¹
¡¦¥Þ¥Í¡¼¥¸¥ã¡¼¥¯¥é¥¹

¡¡º£²ó¤Ï Hp ¤ò´ÉÍý¤¹¤ëµ¡Ç½¤È¥ì¥Ù¥ë¤È Exp ¤ò´ÉÍý¤¹¤ëµ¡Ç½¤Ë¤Ä¤¤¤Æ¤Ï¥¯¥é¥¹¤ÏºîÀ®¤·¤Þ¤»¤ó¡£
¤³¤Î³Ø½¬¤òÄ̤¸¤Æµ¡Ç½¤Îʬ³äÊýË¡¤ò¹Í¤¨¤Æ¡¢¼«ºî¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºîÀ®¤¹¤ë


¡¡¥Þ¥Í¡¼¥¸¥ã¡¼¥¯¥é¥¹°Ê³°¤Î¥¯¥é¥¹¤Ë¼ÂÁõ¤¹¤ë¤¿¤á¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºîÀ®¤·¤Þ¤¹¡£
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î̾¾Î¤ÎÀèƬ¤Ë¤Ï I ¤ò¤Ä¤±¡¢¤½¤Î¸å¡¢Ì¾¾Î¤ò¤Ä¤±¤Þ¤¹¡£


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



¡ã¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¥á¥½¥Ã¥É¤ÎÄêµÁ¡ä


¡¡class ¤ÎÉôʬ¤ò interface ¤Ë½ñ¤­´¹¤¨¤ë¤³¤È¤Ç¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

¡ã¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¡ä
public interface IChara
{
    void SetUpChara();
}

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥×¥í¥°¥é¥à¤ÎÀ߷פˤª¤¤¤Æ¡¢¥¯¥é¥¹¤¬»ý¤Ä¤Ù¤­¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤òÄêµÁ¤¹¤ë¤¿¤á¤Î¡Ö·ÀÌó¡×¤Þ¤¿¤Ï¡Ö¼è¤ê·è¤á¡×¤Î¤è¤¦¤Ê¤â¤Î¤Ç¤¹¡£

¡¡Î㤨¤Ð¡¢¼Ö¤ä¥Ð¥¤¥¯¤È¤¤¤¦¥¯¥é¥¹¤¬¤¢¤ë¤È¤·¤Þ¤¹¡£¤½¤ì¤¾¤ì°Û¤Ê¤ëµ¡Ç½¤ò»ý¤Ä¤«¤â¤·¤ì¤Þ¤»¤ó¤¬¡¢°ÜÆ°¤Ç¤­¤ë¤È¤¤¤¦¶¦Ä̤ÎÆÃÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¶¦Ä̤ÎÆÃÀ­¤ò¡Ö°ÜÆ°²Äǽ¡×¤È¤·¤Æɽ¸½¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤½¤ì¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¹¡£



¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¶ñÂÎŪ¤Ê¼ÂÁõ¤ò»ý¤¿¤º¡¢Ã±¤Ë¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤ÎÀë¸À¤À¤±¤ò»ý¤Á¤Þ¤¹¡£
¥¯¥é¥¹¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤³¤È¤Ç¡¢¤½¤Î¥¯¥é¥¹¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÇÄêµÁ¤µ¤ì¤¿¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬µÁ̳ÉÕ¤±¤é¤ì¤Þ¤¹¡£
¶¯À©ÎϤ¬¤¢¤ë¤È¤â¸À¤¤´¹¤¨¤é¤ì¤Þ¤¹¡£

¡¡Àè¤Û¤É¤Î¼Ö¤òÎã¤Ë¤·¤¿¤È¤­¡¢¶ñÂÎŪ¤Ë¤Ï¡¢°Ê²¼¤Î¤è¤¦¤Ê·Á¤Ç¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄêµÁ¤·¤Þ¤¹¡£

public interface IMovable
{
    void MoveForward(float distance);
    void TurnLeft(float angle);
    void TurnRight(float angle);
}

¡¡¤½¤·¤Æ¡¢¼Ö¤ä¥Ð¥¤¥¯¤Ê¤É¤Î¥¯¥é¥¹¤¬¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Þ¤¹¡£

public class Car : IMovable
{
    // ¼Ö¤ÎÆÃÍ­¤Î¥×¥í¥Ñ¥Æ¥£¤ä¥á¥½¥Ã¥É¤ÎÄêµÁ
    // ...

    public void MoveForward(float distance)
    {
        // ¼Ö¤ò»ØÄꤷ¤¿µ÷Î¥¤À¤±Á°¿Ê¤µ¤»¤ë½èÍý
        // ...
    }

    public void TurnLeft(float angle)
    {
        // ¼Ö¤ò»ØÄꤷ¤¿³ÑÅÙ¤À¤±º¸¤Ë¶Ê¤²¤ë½èÍý
        // ...
    }

    public void TurnRight(float angle)
    {
        // ¼Ö¤ò»ØÄꤷ¤¿³ÑÅÙ¤À¤±±¦¤Ë¶Ê¤²¤ë½èÍý
        // ...
    }
}

public class Bike : IMovable
{
    // ¥Ð¥¤¥¯¤ÎÆÃÍ­¤Î¥×¥í¥Ñ¥Æ¥£¤ä¥á¥½¥Ã¥É¤ÎÄêµÁ
    // ...

    public void MoveForward(float distance)
    {
        // ¥Ð¥¤¥¯¤ò»ØÄꤷ¤¿µ÷Î¥¤À¤±Á°¿Ê¤µ¤»¤ë½èÍý
        // ...
    }

    public void TurnLeft(float angle)
    {
        // ¥Ð¥¤¥¯¤ò»ØÄꤷ¤¿³ÑÅÙ¤À¤±º¸¤Ë¶Ê¤²¤ë½èÍý
        // ...
    }

    public void TurnRight(float angle)
    {
        // ¥Ð¥¤¥¯¤ò»ØÄꤷ¤¿³ÑÅÙ¤À¤±±¦¤Ë¶Ê¤²¤ë½èÍý
        // ...
    }
}

¡¡¤³¤Î¤è¤¦¤Ë¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢°Û¤Ê¤ë¥¯¥é¥¹¤Ç¤â¶¦Ä̤ε¡Ç½¤ò»ý¤¿¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤Þ¤¿¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î²¸·Ã¤ÏÁ·ë¹çÀ­¤ò¹â¤á¤ë¤³¤È¤Ç¡¢¤è¤ê½ÀÆð¤Ç³ÈÄ¥²Äǽ¤ÊÀ߷פò¼Â¸½¤¹¤ë¤³¤È¤¬¤Ç¤­¤ëÅÀ¤Ë¤¢¤ê¤Þ¤¹¡£
¤½¤ì¤Ë¤è¤Ã¤Æ¡¢½èÍý¤òÃê¾Ý²½¤·¤Æ¤¤¤¯¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡º£²ó¤Î¥¯¥é¥¹¤Îʬ³ä¤Ë¤Ï¡¢Ãê¾Ý²½¤Î¹Í¤¨¤Ë´ð¤Å¤¤¤Æ¼ÂÁõ¤ò¹Ô¤Ã¤Æ¤¤¤­¤Þ¤¹¡£


¡ã»²¹Í¥µ¥¤¥È¡ä
MicroSoft
interface(C# ¥ê¥Õ¥¡¥ì¥ó¥¹)
++C++; // ̤³ÎǧÈô¹Ô C ÍÍ
¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
Qiita @yutorisan ÍÍ
¡ÚC#¡Û¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤ÎÍøÅÀ¤¬Íý²ò¤Ç¤­¤Ê¤¤¿Í¤Ï¡Ö¥¤¥ó¥¿¡¼¥Õ¥§¥¤¥¹¤Ë¤Ï£³¤Ä¤Î¥¿¥¤¥×¤¬¤¢¤ë¡×¤³¤È¤òÍý²ò¤·¤è¤¦
¥¨¥ó¥¸¥Ë¥¢¤¬Á÷¤ë·êÁÒÀ¸³è¤Î¤¹¡µ¤á ÍÍ
¡ÚC#¡ÛInterface¤Î»È¤¤¤É¤³¤í¤ÏÇÛÎó¤Ö¤ó²ó¤·¤Î¥Ý¥ê¥â¡¼¥Õ¥£¥º¥à¤ÇÍý²ò½ÐÍè¤ë¡ª


¡ã¥¤¥ó¥¿¡½¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤òºîÀ®¤¹¤ë¡ä


¡¡ºîÀ®¤·¤¿ IChara ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¥¯¥é¥¹¤Ë¼ÂÁõ¤·¤Æ¡¢CharaController ¤ÎÃæ¿È¤òÊ£¿ô¤Î¥¯¥é¥¹¤Ëʬ³ä¤·¤Æ¤¤¤­¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¾ì¹ç¡¢¼ÂÁõ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤Ë¤Ïɬ¤º¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Æâ¤Ë¤¢¤ë¥á¥½¥Ã¥É¤ä¥×¥í¥Ñ¥Æ¥£¤ò½ñ¤¯(¼ÂÁõ)¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
½ñ¤«¤Ê¤¤¤È¥¨¥é¡¼¤¬½Ð¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£¤³¤ì¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤âÆÃħ¤Ç¤¹¡£

¡¡¼ÂÁõ¤·¤¿¥á¥½¥Ã¥É¤Ï public °·¤¤¤Ë¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤Ï¥á¥½¥Ã¥É¤ÎÄêµÁ¤À¤±¤ò¹Ô¤Ã¤Æ¤¤¤ë¤Î¤Ç½èÍý¤ÎÃæ¿È¤¬¤¢¤ê¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢override ¥­¡¼¥ï¡¼¥É¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢½èÍý¤ò¼ÂºÝ¤Ë½ñ¤­¹þ¤ó¤Ç¡¢Ê¸»úÄ̤ê¡Ö¼ÂÁõ¡×¤ò¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£


¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤ò½çÈ֤˺îÀ®¤¹¤ë


¡¡³Æ¥¯¥é¥¹¤´¤È¤ËÌÀ³Î¤ÊÌò³ä¤òÀߤ±¤ë¤È¤È¤â¤Ë¡¢ÀÕ̳¤Î¤Ê¤¤½èÍý¤Ï½ñ¤­¹þ¤Þ¤Ê¤¤¤è¤¦¤ËÇÛθ¤·¤Þ¤¹¡£

¡¡¤Þ¤¿ CharaManager ¤¬¡¢Ê¬³ä¤·¤¿¤¹¤Ù¤Æ¤Î¥¯¥é¥¹¤Î´ÉÍý¼Ô¤È¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢³Æ¥¯¥é¥¹Æ±»Î¤Ï¤ª¸ß¤¤¤òÃΤé¤Ê¤¤¾õÂÖ(¥á¥ó¥ÐÊÑ¿ô¤Ç´ÉÍý¤·¤Æ¤¤¤Ê¤¤¡£Á·ë¹ç²½)¤òÌÜŪ¤Ë¤â¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¥­¥ã¥é¤Î¸þ¤¤¤Æ¤¤¤ëÊý¸þ¤Î¾ðÊó¤Ë´Ø¤·¤Æ¤Ï¡¢Ê£¿ô¤Î¥¯¥é¥¹¤ÇÍøÍѤ¹¤ë¤¿¤á¡¢¤½¤Î¤è¤¦¤Ê¾ðÊó¤Ï CharaManager ¥¯¥é¥¹Æâ¤Ë´ÉÍý¤·¤Þ¤¹¡£
³Æ¥¯¥é¥¹Æâ¤ÇÊÌ¡¹¤ËÊý¸þ¤Î¾ðÊó¤Ï¼èÆÀ¤»¤º¡¢É¬Íפʥ¯¥é¥¹(CharaAnime ¤È CharaAttack)¤Ë¡¢¥á¥½¥Ã¥É¤Î°ú¿ô¤òÄ̤¸¤ÆÁ÷¤êÆϤ±¤ë·Á¤Ç¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£


£±¡¥CharaMove.cs


¡¡°ÜÆ°¤Ë´Ø¤¹¤ëµ¡Ç½¤òÌò³ä¤È¤·¤Æ»ý¤Ä¥¯¥é¥¹¤Ç¤¹¡£
CharaController ¥¯¥é¥¹¤Ë¤¢¤Ã¤¿¡¢°ÜÆ°¤Ë´Ø¤¹¤ë¥á¥ó¥ÐÊÑ¿ô¤È¥á¥½¥Ã¥É¤ò¤³¤Á¤é¤Ë°Ü¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ç¤¢¤ë SetUpChara ¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¡¢¤³¤Î¥¯¥é¥¹Æȼ«¤Î¿¶¤ëÉñ¤¤¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡°ÜÆ°¤Î½èÍý¤Ï²èÌ̤ò¥¯¥ê¥Ã¥¯(¥¿¥Ã¥×)¤·¤Æ¤¤¤ë´Ö¡¢¤½¤ÎÊý¸þ¤Ë¸þ¤«¤Ã¤Æ°ÜÆ°¤¹¤ë¥¿¥¤¥×¤Î°ÜÆ°ÊýË¡¤Ç¤¹¡£
CharaManager ¤Î Update ¥á¥½¥Ã¥ÉÆâ¤Ç¥¯¥ê¥Ã¥¯¤ÎÆþÎϤò¼õ¤±ÉÕ¤±¡¢Move ¥á¥½¥Ã¥É¤Î°ú¿ô¤Ë°ÜÆ°Êý¸þ¤Î¾ðÊó¤ò¤â¤é¤¦¤³¤È¤Ç¡¢°ÜÆ°¤ò¼Â¹Ô¤·¤Þ¤¹¡£


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




¡¡¥­¥ã¥é¤Î°ÜÆ°ÈϰϤò limitPosX ÊÑ¿ô¤È limitPosY ÊÑ¿ô¤Ç´ÉÍý¤·¤Æ¤¤¤Þ¤¹¤¬¡¢¤³¤³¤Ç¤ÏÊ̤μÂÁõÊýË¡¤ò¿·¤·¤¯Äɲ䷤Ƥ¤¤Þ¤¹¡£

¡¡¸µ¤Î½èÍý¤Ç¤âÌäÂê¤Ê¤¯µ¡Ç½¤·¤Þ¤¹¤¬¡¢º£²ó¤ÎÊýË¡¤Ï¡¢¥·¡¼¥ó¥Ó¥å¡¼Æâ¤Ë Create Empty ¤ÇºîÀ®¤·¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò£²¤ÄÇÛÃÖ¤·¡¢
¤½¤ì¤é¤òÂгÑ(º¸²¼¤È±¦¾å)¤ËÇÛÃÖ¤¹¤ë¤³¤È¤Ç¡¢¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤ò°ÜÆ°ÈϰϤÎÃͤȤ·¤ÆÍøÍѤ¹¤ë¤â¤Î¤Ç¤¹¡£

¡¡¿·¤·¤¤ÊÑ¿ô¤Ï Transform ·¿¤ÇÀë¸À¤¹¤ë¤¿¤á¡¢¥·¡¼¥ó¥Ó¥å¡¼Æâ¤Ë¤¢¤ë¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤ò»²¾È¤·¤Æ°ÜÆ°ÈϰϤòÀßÄꤹ¤ëÊýË¡¤Ë¤Ê¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢°ÊÁ°¤Î¼ÂÁõÊýË¡¤è¤ê¤âÍ»Ä̤¬Íø¤­¤ä¤¹¤¯¡¢°ÜÆ°ÈϰϤòÊѤ¨¤¿¤¤¾ì¹ç¤Ë¤Ï¥·¡¼¥ó¥Ó¥å¡¼Æâ¤Ë¤¢¤ë¥ª¥Ö¥¸¥§¥¯¥È¤òÆ°¤«¤¹¤À¤±¤ÇÊѹ¹¤Ç¤­¤Þ¤¹¡£

¡¡¥¹¥Æ¡¼¥¸¤Î¥µ¥¤¥º¤Ê¤É¤ÏÊѹ¹¤Ë¤Ê¤ë²ÄǽÀ­¤â¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ÎÅÔÅÙ¡¢ÊÑ¿ô¤ÎÃͤòÅÐÏ¿¤·Ä¾¤¹ÊýË¡¤è¤ê¤â
¥ª¥Ö¥¸¥§¥¯¥È¤Î°ÌÃÖ¤ò»²¾È¤·¤Æ¥×¥í¥°¥é¥à¼«ÂΤ¬¼«Æ°Åª¤ËÈϰϤòÄ´À°¤·¤Æ¤¯¤ì¤ëÊý¼°¤ÎÊý¤¬ÈÆÍÑÀ­¤È½¤Àµ¤Ë¶¯¤¤À߷פˤʤê¤Þ¤¹¡£


¹½À®



´ÉÍýÍÑ¥Õ¥©¥ë¥ÀÍѤΥª¥Ö¥¸¥§¥¯¥È



º¸²¼¤ËÇÛÃÖ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È



±¦¾å¤ËÇÛÃÖ¤¹¤ë¥ª¥Ö¥¸¥§¥¯¥È



¡¡Â¾¤Î¥²¡¼¥à¤Ë¤â±þÍѤǤ­¤Þ¤¹¡£


£²¡¥CharaAnime.cs


¡¡¥¢¥Ë¥á¤Ë´Ø¤¹¤ëµ¡Ç½¤òÌò³ä¤È¤·¤Æ»ý¤Ä¥¯¥é¥¹¤Ç¤¹¡£
CharaController ¥¯¥é¥¹¤Ë¤¢¤Ã¤¿¡¢¥¢¥Ë¥á¤Ë´Ø¤¹¤ë¥á¥ó¥ÐÊÑ¿ô¤È¥á¥½¥Ã¥É¤ò¤³¤Á¤é¤Ë°Ü¤·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿¡¢¥ê¥Æ¥é¥ëɽµ­¤·¤Æ¤¤¤¿ Animator ¤Î Parameter ÃͤˤĤ¤¤Æ¡¢¥á¥ó¥ÐÊÑ¿ô¤òÄɲä·¤ÆÃÖ¤­´¹¤¨¤Æ¤ê¤Þ¤¹¡£

¡¡¤³¤Î¥¯¥é¥¹¤Ç¤Ï°ÜÆ°Êý¸þ¤Ë¹ç¤ï¤»¤¿¥¢¥Ë¥á¡¼¥·¥ç¥ó¤ÎƱ´ü½èÍý¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
Àè¤Û¤É¤Î CharaMove ¥¯¥é¥¹¤ÈƱÍͤˡ¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¡¢ÄêµÁ¤µ¤ì¤Æ¤¤¤ë SetUpChara ¥á¥½¥Ã¥ÉÆâ¤Ë¤Æ Animator ¥¯¥é¥¹¤Î¼èÆÀ¤ò¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡Àè¤Û¤É¤Î CharaMove ¥¯¥é¥¹¤Î SetUpChara ¥á¥½¥Ã¥É¤Ç¤Ï Debug.Log ¥á¥½¥Ã¥É°Ê³°¤Ë¤ÏÆä˲¿¤â½èÍý¤Ï½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤»¤ó¤Ç¤·¤¿¡£
¤³¤Î¤è¤¦¤Ë¡¢Æ±¤¸¥á¥½¥Ã¥É¤Ç¤¢¤Ã¤Æ¤â¼ÂÁõ¤µ¤ì¤Æ¤¤¤ë(½ñ¤«¤ì¤Æ¤¤¤ë)ÆâÍƤ¬°Û¤Ê¤Ã¤Æ¤¤¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£

¡¡¤Ê¤ª¡¢SetUpChara ¥á¥½¥Ã¥É¤Ç¼Â¹Ô¤·¤Æ¤¤¤ë Animator ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤ò¼èÆÀ¤¹¤ëÌ¿Îá¤Ï
»Ò¥ª¥Ö¥¸¥§¥¯¥È¤Ë Animator ¥³¥ó¥Ý¡¼¥Í¥ó¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤òÁÛÄꤷ¤Æ¤¤¤Þ¤¹¡£
»Ò¥ª¥Ö¥¸¥§¥¯¥È¤¬¤Ê¤¤¹½À®¤Î¾ì¹ç¤Ë¤Ï¡¢SetUpChara ¥á¥½¥Ã¥É¤Î½èÍý¤òŬµ¹½¤Àµ¤·¤Æ¡¢¥³¥ó¥Ý¡¼¥Í¥ó¥È¤Î¼èÆÀÀè¤òÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£


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




¡¡if / else ʸ¤Ë¤è¤ëʬ´ô½èÍý¤Î¤¦¤Á¡¢½èÍýÆâÉô¤ÇƱ¤¸ÊÑ¿ô¤ËÂФ·¤ÆÂåÆþ½èÍý¤ò¹Ô¤¦¾ì¹ç¤Ë¤Ï¡¢»°¹à±é»»»Ò¤òÍøÍѤ·¤Æµ­½Ò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
ËÜÍè¤Î if /else ʸ¤ÈÈæ³Ó¤·¤Ê¤¬¤é¹½Ê¸¤òÆɤ߲ò¤¤¤Æ¤ß¤Þ¤·¤ç¤¦¡£


»²¹Íµ­»ö
@crazy_travelerÍÍ
»²¹Í¤Ë¤Ê¤ë»°¹à±é»»»Ò


£³¡¥CharaAttack.cs


¡¡¹¶·â¤Ë´Ø¤¹¤ëµ¡Ç½¤òÌò³ä¤È¤·¤Æ»ý¤Ä¥¯¥é¥¹¤Ç¤¹¡£
CharaController ¥¯¥é¥¹¤Ë¤¢¤Ã¤¿¡¢¹¶·â¤Ë´Ø¤¹¤ë¥á¥ó¥ÐÊÑ¿ô¤È¥á¥½¥Ã¥É¤ò¤³¤Á¤é¤Ë°Ü¤·¤Æ¤¤¤Þ¤¹¡£
¤½¤ÎºÝ¤Ë¥á¥½¥Ã¥É̾¤òÊѹ¹¤·¤¿¤ê¡¢¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤òľÀܼ¹Ԥ·¤Ê¤¤¤¿¤á¤ËÃç²ðÌò¤Î¥á¥½¥Ã¥É¤òÄɲ䷤Ƥ¤¤Þ¤¹¡£

¡¡¥Ý¥¤¥ó¥È¤Ï¡¢¥×¥ì¥¤¥ä¡¼¤ÎºÇ¿·¤ÎÊý¸þ¤Î¾ðÊó¤ò CharaManager ¤«¤é»²¾È¤¹¤ë¤¿¤á¤Î¥×¥í¥Ñ¥Æ¥£¤òÍÑ°Õ¤·¤Æ¤¤¤ëÉôʬ¤Ç¤¹¡£
C# ¤Î¥×¥í¥Ñ¥Æ¥£¤Ï¡¢ÃÍ·¿¤Ç¤¢¤Ã¤Æ¤â»²¾È·¿¤Ç¤¢¤Ã¤Æ¤â¡¢³°Éô¤ÎÊÑ¿ô¤äÃͤòÊÝ»ý¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢¥²¥Ã¥¿¡¼¤ä¥»¥Ã¥¿¡¼¤Î¥á¥½¥Ã¥É¤òÄ̤¸¤Æ³°Éô¤È¤ÎÃͤΤä¤ê¼è¤ê¤ò¹Ô¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤ÆÃͤòÀßÄꤹ¤ë¤È¡¢ÆâÉô¤Ç¤ÎÃͤΥ³¥Ô¡¼¤¬¹Ô¤ï¤ì¡¢¤½¤Î¸å¤â³°ÉôÊÑ¿ô¤¬¹¹¿·¤µ¤ì¤ë¤È¥×¥í¥Ñ¥Æ¥£¤Î¥»¥Ã¥¿¡¼¤¬¸Æ¤Ó½Ð¤µ¤ì¤ÆÃͤ¬¹¹¿·¤µ¤ì¤Þ¤¹¡£
¤³¤Î»ÅÁȤߤˤè¤ê¡¢ºÇ¿·¤Î¾ðÊó¤ò¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤Æ»²¾È¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡º£²ó¤Ç¤¢¤ì¤Ð¡¢CharaManager ¤Ë¤¢¤ë direction ÊÑ¿ô¤Ï Vector2 ·¿¤Ç¤¢¤ê¡¢ÃÍ·¿¤Ç¤¹¡£
¤½¤Î¾ðÊó¤ò»²¾È¤¹¤ë¤¿¤á¤ËÍÑ°Õ¤¹¤ë¥×¥í¥Ñ¥Æ¥£¤Î·¿¤â Vector3 ¤ÇÃÍ·¿¤Ç¤¹¤¬¡¢¥×¥í¥Ñ¥Æ¥£¤ò²ð¤·¤ÆÃͤòÀßÄꤹ¤ë»ö¤Ç¡¢ºÇ¿·¤Î»²¾È¤¬²Äǽ¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Îµ¡Ç½¤Ë¤è¤ê¡¢CharaManager ¤Î¾ðÊó¤ò¸µ¤Ë¼«Æ°Åª¤ËºÇ¿·¤Î¥×¥ì¥¤¥ä¡¼¤ÎÊý¸þ¤Î¾ðÊó¤ò¹¹¿·¤Ç¤­¤ë»ÅÁȤߤòƳÆþ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤Þ¤¿¿·¤·¤¤µ¡Ç½¤È¤·¤Æ¡¢¹¶·â¤ò°ì»þÄä»ß/ºÆ³«¤¹¤ë¤¿¤á¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£


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




¡¡bool ·¿¤ÎÊÑ¿ô¤Ï ! ±é»»»Ò¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢ÂåÆþ¤¹¤ëÃͤòÆþ¤ìÂؤ¨¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
!isAttack ¤¬ true ¤Î¾ì¹ç¤Ë¤Ï false ¤Ë¤Ê¤ê¡¢false ¤Î¾ì¹ç¤Ë¤Ï true ¤Ë¤Ê¤ê¤Þ¤¹¡£


£´¡¥CharaManager.cs


¡¡¾åµ­¤Î£³¤Ä¤Î¥¯¥é¥¹¤ò¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¥¯¥é¥¹¤Ç¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ë¤Ï RequireComponent °À­¤òÉÕÍ¿¤·¡¢³ºÅö¤¹¤ë£³¤Ä¤Î¥¯¥é¥¹¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢
¤³¤Î¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤¹¤ë¤È¡¢Àè¤Û¤É¤Î£³¤Ä¤Î¥¯¥é¥¹¤â¼«Æ°Åª¤ËÄɲäǥ¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£
¥¢¥¿¥Ã¥Á¤Î¼ê´Ö¤¬¾Ê¤±¤ë¤È¤È¤â¤Ë¡¢¥¢¥¿¥Ã¥Á˺¤ì¤òËɻߤ¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£

¡¡¤³¤Î¥¯¥é¥¹¤Î¤ß¤¬£³¤Ä¤Î¥¯¥é¥¹¤ò¥á¥ó¥ÐÊÑ¿ô¤È¤·¤Æ´ÉÍý¤·¡¢¤½¤ì¤¾¤ì¤Î½èÍý¤ËÂФ·¤ÆÌ¿Îá¤ò½Ð¤·¤Æ¤¤¤Þ¤¹¡£
¥È¥Ã¥×¥À¥¦¥ó·¿¤Î¤è¤¦¤ÊÌ¿Îá·ÏÅý¤Î»ÅÁȤߤò¥¤¥á¡¼¥¸¤·¤Æ¤â¤é¤¨¤ì¤Ðʬ¤«¤ê¤ä¤¹¤¤¤Ç¤·¤ç¤¦¡£

¡¡¤Þ¤¿¶¦Ä̤νèÍý¤È¤·¤Æ¥­¥ã¥é¤ÎÊý¸þ¤Î¾ðÊó¤ò´ÉÍý¤·¡¢¤½¤Î¾ðÊó¤ò¥¢¥Ë¥á¡¼¥·¥ç¥ó¤Î¥¯¥é¥¹¤È¹¶·â¤Î¥¯¥é¥¹¤ËÂФ·¤Æ¡¢¥á¥½¥Ã¥É¤òÄ̤¸¤ÆÅϤ·¤Æ¤¤¤Þ¤¹¡£
¤³¤¦¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢³Æ¥¯¥é¥¹Æâ¤ÇȽÄê¤ò¤µ¤»¤ëɬÍפʤ¯¡¢¶¦Ä̤ÎÃͤò¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹¤ËÍøÍѤ·¤Æ¤â¤é¤¦À߷פǤ¹¡£

¡¡¤¿¤À¤·¡¢½èÍý¤Î¥¿¥¤¥ß¥ó¥°¤ÎÌäÂê¤Ç¡¢¤³¤Î¥á¥½¥Ã¥É¤Î°ú¿ô¤ÇÅϤ¹ÊýË¡¤Ç¤Ï¡¢Êý¸þ¤Î¾ðÊó¤òÅϤ»¤Ê¤¤¥¯¥é¥¹(CharaAttack)¤â¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ï¹¶·â½èÍý¤Î¥¿¥¤¥ß¥ó¥°¤¬ CharaManager ¤Ç¤Ï¤Ê¤¯¡¢CharaAttack ¤Ë°Í¸¤·¤Æ¤¤¤ë¤¿¤á¡¢¾ï¤ËºÇ¿·¤ÎÃͤòÅϤ·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£

¡¡ºÇ¤â´Êñ¤ÊÊý¸þ¾ðÊó¤ÎÅϤ·Êý¤Ï¡¢CharaManager ¥¯¥é¥¹¤Î Update ¥á¥½¥Ã¥É¤Ç CharaAttack Æâ¤ËÍÑ°Õ¤·¤Æ¤¢¤ëÊý¸þ¾ðÊó¤ÎÃͤò¿ï»þ¹¹¿·¤¹¤ë¤â¤Î¤Ç¤¹¡£
¤³¤ì¤Ç¤¢¤ì¤Ð¡¢¤¤¤Ä¹¶·â¤Î½èÍý¤ò¤ª¤³¤Ê¤Ã¤Æ¤âºÇ¿·¤ÎÊý¸þ¤Î¾ðÊó¤òÍøÍѤǤ­¤Þ¤¹¡£

¡¡º£²ó¤Ï¤½¤Î¥¢¥×¥í¡¼¥Á¤Ç¤Ï¤Ê¤¯¡¢CharaAttack ¥¯¥é¥¹¤Ë¥×¥í¥Ñ¥Æ¥£¤òÍÑ°Õ¤·¡¢¤½¤Î»²¾ÈÀè¤ò CharaManager ¥¯¥é¥¹¤ÎÊý¸þ¾ðÊó¤Èɳ¤Å¤±¤Þ¤¹¡£
¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤ÆÃͤòÀßÄꤹ¤ë¤È¡¢ÆâÉô¤Ç¤ÎÃͤΥ³¥Ô¡¼¤¬¹Ô¤ï¤ì¡¢¤½¤Î¸å¤â³°ÉôÊÑ¿ô¤¬¹¹¿·¤µ¤ì¤ë¤È¥×¥í¥Ñ¥Æ¥£¤Î¥»¥Ã¥¿¡¼¤¬¸Æ¤Ó½Ð¤µ¤ì¤ÆÃͤ¬¹¹¿·¤µ¤ì¤Þ¤¹¡£
¤³¤Î»ÅÁȤߤˤè¤ê¡¢CharaAttack ¥¯¥é¥¹Â¦¤Ç¤â¡¢ºÇ¿·¤Î¾ðÊó¤ò¥×¥í¥Ñ¥Æ¥£¤òÄ̤¸¤Æ»²¾È¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤Ê¤ªº£²ó¤Ï½èÍý¤Î³Îǧ¤Î¤¿¤á¡¢Start ¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ½èÍý¤ò¥¹¥¿¡¼¥È¤µ¤»¤Æ¤¤¤Þ¤¹¤¬¡¢
¼ÂºÝ¤Ë¤Ï³°Éô¥¯¥é¥¹¤«¤é SetUpCharaManager ¥á¥½¥Ã¥É¤Ø¼Â¹ÔÌ¿Îá¤ò¼õ¤±¤ÆÆ°¤¤¤Æ¤¤¤¯Á°Äó¤ÇÀ߷פ·¤Æ¤¤¤Þ¤¹¡£


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



¡ã¥×¥í¥Ñ¥Æ¥£¤ÎÍý²ò¤ò¿¼¤á¤ë¡ä


¡¡º£²ó¡¢¥×¥í¥Ñ¥Æ¥£¤Î set ¤Ë³°Éô¤Î¥¯¥é¥¹¤Î¾ðÊó¤òÀßÄꤹ¤ë¼êË¡¤ò¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£

    // direction ¤Î¥×¥í¥Ñ¥Æ¥£¡£ÆâÉô¤Ç CharaAttack ¤Î AttackDirection ¥×¥í¥Ñ¥Æ¥£¤âƱ»þ¤Ë¹¹¿·¤·¤Æ¤¤¤ë
    public Vector2 Direction {
        get => direction;
        set {
            direction = value;

            if (charaAttack) {
                charaAttack.AttackDirection = value;
            }
        }
    }

¡¡¤³¤Î¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¡¢CharaAttack ¥¯¥é¥¹Æâ¤Ë¤¢¤ë AttackDirection ¥×¥í¥Ñ¥Æ¥£¤Î»²¾ÈÀè(set) ¤¬ CharaManager Æâ¤Î Direction ¥×¥í¥Ñ¥Æ¥£¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡direction ÊÑ¿ô¤Ï Vector3 ·¿¤Ç¤¢¤ë¤Î¤Ç¡¢¤³¤Î¾ðÊó¤ò¤½¤Î¤Þ¤ÞÊ̤ξðÊó¤È¤·¤Æ Vector3 ·¿¤Ç°·¤ª¤¦¤È¤¹¤ë¤È¡¢¤½¤ì¤âÃÍ·¿¤Ë¤Ê¤ê¤Þ¤¹¡£
ÃÍ·¿¤Î¾ðÊó¤Ï¡¢ÂåÆþ¤·¤¿¥¿¥¤¥ß¥ó¥°¤Ç¥³¥Ô¡¼¤·¤¿ÃͤòÊÝ»ý¤·¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢¤º¤Ã¤ÈÊÝ»ý¤·¤Æ¤ª¤¯¤³¤È¤Ë¤Ï¸þ¤¤¤Æ¤¤¤Þ¤¹¤¬¡¢
ºÇ¿·¤ÎÃͤˤĤ¤¤Æ¤Ï¡¢»²¾È¤·¤Æ¤¤¤ëÌõ¤Ç¤Ï¤Ê¤¤¤¿¤á¡¢¾ï¤ËÃͤι¹¿·½èÍý¤ò¹Ô¤ï¤Ê¤¤¤ÈºÇ¿·¤Î¾õÂ֤ˤϤʤê¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢Î㤨¤Ð Update ¥á¥½¥Ã¥É¤Ê¤É¤Ç¡¢CharaAttack ¦¤¬ direction ÊÑ¿ô¤ÎÃͤò¾ï¤Ë¹¹¿·¤¹¤ë¤è¤¦¤Ë(´Æ»ë¤¹¤ë¤è¤¦¤Ë)¤·¤Ê¤¤¤È¡¢¸Å¤¤¾ðÊó¤ò»È¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤½¤³¤Ç¡¢¥×¥í¥Ñ¥Æ¥£¤Îµ¡Ç½¤òÍøÍѤ·¤Þ¤¹¡£
¥×¥í¥Ñ¥Æ¥£¤Ç set ¤¹¤ë¾ðÊó¤Ï¾¤Î¥¯¥é¥¹¤Ç¤¢¤Ã¤Æ¤âÀßÄê¤Ç¤­¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¾åµ­¤Î¤è¤¦¤ËÀßÄêÀè¤ò³°Éô¤Î¥×¥í¥Ñ¥Æ¥£¤Ë¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¼«Æ°Åª¤ËºÇ¿·¤ÎÃͤ˹¹¿·¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¥×¥í¥Ñ¥Æ¥£¤Îµ¡Ç½¤ò¤·¤Ã¤«¤ê¤ÈÍý²ò¤·¡¢¾å¼ê¤¯¥í¥¸¥Ã¥¯¤òÁȤó¤Ç¤¤¤¯¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£



¡¡¤Þ¤¿ UniRx ¤Î ReasctiveProperty ¤Îµ¡Ç½¤ò³èÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤è¤ê¸úΨ¤ÎÎɤ¤¥×¥í¥°¥é¥à¤òÁȤळ¤È¤¬²Äǽ¤Ç¤¹¡£

¡¡²¼µ­¤Ï»²¹ÍÍѤΥ½¡¼¥¹¥³¡¼¥É¤ÎÈ´¿è¤Ç¤¹¡£


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



¥¯¥é¥¹¿Þ


¡¡¤³¤³¤Þ¤Ç¤ËÀ©ºî¤·¤¿¥¯¥é¥¹´Ö¤Î´Ø·¸À­¤ò²Ä»ë²½¤¹¤ë¤³¤È¤Ç¡¢Ê¬³ä¤µ¤ì¤¿¥¯¥é¥¹¤¬¤É¤Î¤è¤¦¤Ê¾õ¶·¤«¡¢¥¤¥á¡¼¥¸¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡¡¥¯¥é¥¹¿Þ¤òÍÑ°Õ¤·¤Þ¤·¤¿¤Î¤Ç¡¢³Æ¥¯¥é¥¹¤Î´ØÏ¢À­¤ò¸«¤Æ¤ß¤Þ¤·¤ç¤¦¡£



¡ã¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¥¯¥é¥¹¤Î´Ø·¸À­¡ä



¡ã´ÉÍý¥¯¥é¥¹¤È¾¤Î¥¯¥é¥¹¤Î´Ø·¸À­¡ä



¡¡£³¤Ä¤Î¥¯¥é¥¹¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤¿¤á¡¢¤¹¤Ù¤Æ¤Î¥¯¥é¥¹¤Ë SetUpChara ¥á¥½¥Ã¥É¤¬¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
Ʊ̾¤Î¥á¥½¥Ã¥É¤Ç¤¹¤¬¡¢¼ÂºÝ¤Ë¤Ï¤½¤ì¤¾¤ì¤Î¥¯¥é¥¹Æâ¤Ë½ñ¤¤¤Æ¤¢¤ë½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¤Î¤Ç¡¢¿¶¤ëÉñ¤¤¤¬ÊѤï¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿ CharaManager ¥¯¥é¥¹¤Ï¾¤Î Chara ¡Á ¥¯¥é¥¹¤òÃΤäƤ¤¤Þ¤¹¤¬¡¢Â¾¤Î¥¯¥é¥¹Æ±»Î¤Ë¤Ï¤Ä¤Ê¤¬¤ê¤¬¤¢¤ê¤Þ¤»¤ó¡£
¤è¤Ã¤Æ¡¢¥¯¥é¥¹´Ö¤Î´Ø·¸À­¤¬Á·ë¹ç²½¤Ç¤­¡¢¥¯¥é¥¹ÆâÉô¤ò½¤Àµ¤¹¤ëºÝ¤Ë¡¢Â¾¤Î¥¯¥é¥¹¤Î¤³¤È¤òµ¤¤Ë¤»¤º¤Ë½¤Àµ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤Ë¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÍøÍѤ¹¤ë¤³¤È¤Ç¡¢Æ±Ì¾¤Î¥á¥½¥Ã¥É¤ò»È¤¦¤¬¡¢¤½¤ÎÆâÍƤޤǤϴØÃΤ·¤Ê¤¤¡¢¤È¤¤¤¦·Á¤Ç½èÍý¤ÎÃê¾Ý²½¤¬¤Ç¤­¡¢
²Ã¤¨¤Æ¡¢Æ±Ì¾¤Î¥á¥½¥Ã¥É¤Ç¤¢¤ê¤Ê¤¬¤é¡¢°Û¤Ê¤ë½èÍý¤ò¼Â¹Ô¤·¤Æ¤¤¤¯(¿¶¤ëÉñ¤¤¤òÊѤ¨¤ë)¤È¤¤¤¦¡¢Â¿ÂÖÀ­¤Î³µÇ°¤â°ì½ï¤ËÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ·¿¥×¥í¥°¥é¥à¤Ï¼ÂºÝ¤Ë»È¤¤¤Ê¤¬¤é³Ø½¬¤·¤Æ¤¤¤¯¤È¡¢³µÇ°¤äµ¡Ç½¤ÎÊØÍø¤µ¤Ê¤É¤¬¸«¤¨¤Æ¤­¤Þ¤¹¤Î¤Ç¡¢
¤Ê¤ë¤Ù¤¯½èÍý¤ò½ñ¤¤¤ÆÆ°¤«¤·¤Ê¤¬¤é³Ø½¬¤ò¤·¤Æ¤¤¤¯¤È¤è¤¤¤Ç¤·¤ç¤¦¡£


¡¡
¡¡¥¯¥é¥¹¿Þ¤ò½ñ¤¯¤³¤È¤Ë¤è¤ê¡¢¼«Ê¬¤Î¥¤¥á¡¼¥¸¤òÀ°Íý¤¹¤ëºÝ¤Ë¤âÌòΩ¤Á¤Þ¤¹¤·¡¢Âè»°¼Ô¤Ë¥¯¥é¥¹¤Î¾õÂÖ¤òÀâÌÀ¤¹¤ë¾ì¹ç¤Ë¤â¾ðÊó¤òÀµ³Î¤ËÅÁ¤¨¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£


¥×¥ì¥¤¥ä¡¼Ìò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë³Æ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤·¡¢ÀßÄê¤ò¹Ô¤¦


¡¡¤Þ¤º¥×¥ì¥¤¥ä¡¼Ìò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÊ£À½¤·¤Þ¤¹¡£Ê£À½¸å¡¢£±¤Ä¤ÏÈóɽ¼¨¤Ë¤·¤Þ¤¹¡£
¥«¥á¥é¤Ê¤É¤ÇÄɽ¾ÂоݤˤʤäƤ¤¤ë¾ì¹ç¤Ë¤Ï¡¢¥«¥á¥é¤ÎÀßÄêÀè¤â¸«Ä¾¤·¤Æ¥¢¥µ¥¤¥ó¤·Ä¾¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡°ÊÁ°¤Î¾õÂ֤Υ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò»Ä¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ç¤ÎÀßÄêÃͤγÎǧ¤Ê¤É¤â½ÐÍè¤ë¤¿¤á¤Ç¤¹¡£



¡¡Ê£À½¤µ¤ì¤¿Êý¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤¢¤ë CharaController ¤Î¥¹¥¯¥ê¥×¥È¤ò Remove ¤·¡¢Âå¤ï¤ê¤Ë CharaManager ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤·¤Æ¤¯¤À¤µ¤¤¡£
°ì½ï¤Ë£³¤Ä¤Î¥¯¥é¥¹¤â¼«Æ°Åª¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥³¥é¥¤¥À¡¼¤È Rigidbody ¤Ï¤½¤Î¤Þ¤Þ¤ÇÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¤Þ¤¿¡¢BulletGenerator ¥¯¥é¥¹¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤â¥¢¥¿¥Ã¥Á¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡CharaMove ¥¯¥é¥¹¤Ë¤Ï°Üư®Å٤ȰÜÆ°ÈϰϤÎÀßÄê¡¢CharaAttack ¤Ë¤Ï¹¶·â¤Î´Ö³Ö¤ÎÀßÄ꤬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤¾¤ìÀßÄê¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£


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



¡¡°Ê¾å¤ÇÀßÄê¤Ï´°Î»¤Ç¤¹¡£



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


¡¡¥²¡¼¥à¤ò¼Â¹Ô¤·¡¢¥¯¥é¥¹¤òʬ³ä¤¹¤ëÁ°¤ÈƱ¤¸¤è¤¦¤ËÆ°ºî¤¹¤ë¤«¤ò¸¡¾Ú¤·¤Æ¤¯¤À¤µ¤¤¡£


¡ã³Îǧư²è¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯


À߷פνÅÍ×À­¤È¥¯¥é¥¹¤Îʬ³ä


¡¡£±¤Ä¤Î¥¯¥é¥¹¤¬ÈîÂç²½¤·¤Æ¤·¤Þ¤¦¤³¤È¤Ï¿¡¹¤¢¤ê¤Þ¤¹¡£
³Ø½¬Ãæ¤Î¤¦¤Á¤ÏÌäÂꤢ¤ê¤Þ¤»¤ó¤¬¡¢¼«Ê¬¤Ç¥×¥í¥°¥é¥à¤ò¹Í¤¨¤Ê¤¬¤é½ñ¤¤¤Æ¤ß¤ë¤È¡¢¤³¤¦¤¤¤Ã¤¿Àß·×Éôʬ¤Ç¤ÎÌäÂê¤Ë¤Ö¤Ä¤«¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á´ðËÜŪ¤Ë¤Ï¡¢¥¯¥é¥¹¤òºîÀ®¤¹¤ëÁ°¤«¤éÈîÂç²½¤¹¤ë²ÄǽÀ­¤¬¸«¤¨¤ë¤³¤È¤¬¤Û¤È¤ó¤É¤Ç¤¹¡£

¡¡¤«¤È¤¤¤Ã¤ÆºÇ½é¤«¤éʬ³ä¤·¤ÆºîÀ®¤·¤Æ¤¤¤±¤ì¤Ð¤è¤¤¤Î¤Ç¤¹¤¬¡¢¤½¤ì¤âÃ桹Æñ¤·¤¤¤Ç¤¹¡£

¡¡¥½¡¼¥¹¥³¡¼¥É¤ò½ñ¤¯Á°¤Ë¡¢À߷פò¹Í¤¨¤ë¤³¤È¤«¤é»Ï¤á¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
°ÊÁ°¤è¤ê¤â¤¿¤¯¤µ¤ó¤Î»þ´Ö¤ò¥¯¥é¥¹¤ÎÀ߷פËÈñ¤ä¤·¤Æ¤ß¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£
¤É¤Î¤è¤¦¤Ê½èÍý¤ò¡¢¤É¤Î¥¯¥é¥¹¤Ë½ñ¤¯¤Î¤«¤òÌÀ³Î¤Ë¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢ÈîÂç²½¤·¤ä¤¹¤¤¥¯¥é¥¹¤òÁ°¤â¤Ã¤ÆǧÃΤ·¤Æ¤ª¤¯¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

¡¡¥½¡¼¥¹¥³¡¼¥É¤ò½ñ¤¤¤Æ¤¤¤ë´Ö¤â¡¢¾ï¤Ë¡¢À߷פòƬ¤Ë¹Í¤¨¤Æ¿Ê¤á¤Æ¤¤¤¯¤è¤¦¤Ë¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
À߷פϽñ¤­½Ð¤·¤Æ¤ª¤¯¤³¤È¤Ç¹Í¤¨¤Æ¤¤¤ë¤³¤È¤ò¸À¸ì²½¡¦²Ä»ë²½¤Ç¤­¤ë¤Î¤Ç¡¢¤è¤ê¥¤¥á¡¼¥¸¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿½ñ¤¤¤Æ½ª¤ï¤ê¤Ë¤Ï¤»¤º¡¢¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤¦¤³¤È¤âǰƬ¤ËÃÖ¤¤¤Æ¤ª¤¯¤È¡¢ÎɼÁ¤Ê¥³¡¼¥Ç¥£¥ó¥°¤¬¹Ô¤¨¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤­¤Þ¤¹¡£

¡¡¥×¥í¥°¥é¥ß¥ó¥°¤ÏÈ¿Éü¤È²þÁ±¤Î·«¤êÊÖ¤·¤Ë¤è¤Ã¤Æ¥¹¥­¥ë¥¢¥Ã¥×¤¬½ÐÍè¤Þ¤¹¡£


¡ã¥µ¥ó¥×¥ë¥³¡¼¥É¡¡¡¼BulletGenerator ¥¯¥é¥¹¤È Bullet ¥¯¥é¥¹¡¼¡ä

¡ã£±¡¥BulletGenerator ¥¯¥é¥¹¡ä


¡¡¥ì¥Ù¥ë¤ÎÃͤ˱þ¤¸¤Æ¡¢Ê£¿ô¤ÎÃƤòȯ¼Í¤¹¤ë¤³¤È¤¬¤Ç¤­¤ëµ¡Ç½¤ò»ý¤Á¤Þ¤¹¡£

¡¡¤³¤Î¥¯¥é¥¹¤â¥×¥ì¥¤¥ä¡¼Ìò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤ÆÍøÍѤ·¤Þ¤¹¡£

¡¡switch ʸ¤Ë¤è¤ëʬ´ô½èÍý¤ò»È¤¤¡¢¥ì¥Ù¥ë¤Ë±þ¤¸¤ÆÃƤÎȯ¼Í¿ô¤òÊѹ¹¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤ÎÉôʬ¤Ï±é»»¼°¤ò¼«Ê¬¤Ç¹Í¤¨¤ë¤³¤È¤Ç¡¢switch ʸ¤Ê¤·¤Ç¤Î¼ÂÁõ¤â²Äǽ¤Ç¤¹¡£
¥Á¥ã¥ì¥ó¥¸¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BulletGenerator : MonoBehaviour
{
    [SerializeField] private Bullet bulletPrefab;

    [SerializeField] private float offsetDegrees;  // ÃƤγÑÅ٤δð½àÃÍ(³Æ¥Ð¥ì¥Ã¥ÈƱ»Î¤Î³ÑÅÙ´Ö³Ö)
    [SerializeField] private float bulletSpeed;    // ÃƤήÅÙ

    [SerializeField] private int level;


    /// <summary>
    /// ¥Ð¥ì¥Ã¥ÈÀ¸À®¤Î½àÈ÷¡£¥ì¥Ù¥ë¤Ë±þ¤¸¤Æ¥Ð¥ì¥Ã¥È¤Î¿ô¤òÁý¤ä¤¹
    /// </summary>
    /// <param name="direction"></param>
    public void PrepareGenerateBullet(Vector2 direction)
    {
        switch (level)
        {
            case 1:
                GenerateBullet(direction);
                break;

            case 2:
                for (int i = -1; i < 2; i += 2)
                {
                    // ÃƤÎÊý¸þ¤È²óž¤ò CalculateBulletDirection ¥á¥½¥Ã¥É¤ò»È¤Ã¤ÆÀßÄꤷ¤Æ¡¢ÃƤÎÀ¸À®
                    GenerateBullet(CalculateBulletDirection(i, direction));
                }
                break;

            case 3:
                for (int i = -1; i < 2; i++)
                {
                    GenerateBullet(CalculateBulletDirection(i, direction));
                }
                break;

            case 4:
                for (int i = -3; i < 4; i += 2)
                {
                    GenerateBullet(CalculateBulletDirection(i, direction));
                }
                break;

            default:
                for (int i = -2; i < 3; i++)
                {
                    GenerateBullet(CalculateBulletDirection(i, direction));
                }
                break;
        }
    }

    /// <summary>
    /// ¥Ð¥ì¥Ã¥ÈÀ¸À®
    /// </summary>
    /// <param name="direction"></param>
    private void GenerateBullet(Vector2 direction)
    {
        // ¤³¤Î¥¯¥é¥¹¤ò¥×¥ì¥¤¥ä¡¼Ìò¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤¹¤ì¤Ð¡¢¤½¤Î°ÌÃÖ¤Çȯ¼Í¤Ç¤­¤ë
        Bullet bullet = Instantiate(bulletPrefab, transform.position, Quaternion.identity);

        bullet.Shoot(direction, bulletSpeed);
    }

    /// <summary>
    /// ÃƤÎÊý¸þ¤ò·×»»¤¹¤ë
    /// </summary>
    private Vector2 CalculateBulletDirection(int numBullets, Vector2 direction)
    {
        // ³ÑÅÙ¤ÎÊäÀµÃͤηèÄê
        float offsetAngle = numBullets * offsetDegrees;

        // Z ¼´¤òÃæ¿´¤Ë²óž¤µ¤»¤¿²óž¾ðÊó(»Í¸µ¿ô)¤òºî¤ë
        Quaternion offsetRotation = Quaternion.Euler(0, 0, offsetAngle);

¡¡¡¡¡¡¡¡// Unity ¤Î¾ì¹ç¡¢Quaternion * Vector3(Vector2) ¤Î·×»»¤ò¤¹¤ë¤È¡¢Vector3 ¤ò Quaternion¤Ç²óž¤µ¤»¤¿ºÂɸ¤¬ÆÀ¤é¤ì¤ë
        // º£²ó¤Î¾ì¹ç¡¢¾åµ­¤Î²óž¾ðÊó(Quaternion)¤Ë¡¢direction(Vector2)¤ò³Ý¤±¤ë¤³¤È¤Ç¡¢ÃƤÎÊý¸þ¤Î¥Ù¥¯¥È¥ë¤¬·è¤Þ¤ë(direction¤òoffsetRotation¤À¤±ÊѤ¨¤ë)
¡¡¡¡¡¡¡¡// direction ¤ÎÊý¸þ¤ò°Ý»ý¤·¤Ä¤Ä¡¢Z ¼´¤À¤±¤ò²óž¤µ¤»¤¿¾ðÊó¤ò»ý¤Ã¤Æ¤¤¤ë¿·¤·¤¤¥Ù¥¯¥È¥ë¤òºîÀ®
        Vector2 offsetDirection = offsetRotation * direction;

        return offsetDirection;
    }
}



¡¡Vector3 ¤Ê¤É¤Î¥Ù¥¯¥È¥ë¤È¤Ï¡¢¿ôÃ;å¤Ïñ½ã¤Ë3¼´¤Î¾ðÊó(À®Ê¬)¤Ç¤Îñ°Ì¤Ç¤¹¤¬¡¢
¤³¤ì¤é¤ÎÀ®Ê¬¤Ï¡¢Â礭¤µ(®ÅÙ)¡¢Êý¸þ¡¢²óž¤â²ÃÌ£¤·¤Æºî¤é¤ì¤Æ¤¤¤ë¤È¤¤¤¦¤³¤È¤òÍý²ò¤·¤Æ¤ª¤¯¤³¤È¤¬ÂçÀڤǤ¹¡£

¡¡Vector2 offsetDirection = offsetRotation * direction;

¡¡¤³¤Î½èÍý¤Ï¡¢ÃƤθþ¤­¤ò¥×¥ì¥¤¥ä¡¼¤Î¸þ¤¤¤Æ¤¤¤ë¸þ¤­¤Ë¹ç¤ï¤»¤Æ¤¤¤ë½èÍý¤Ç¤¹¡£
´Ý¤¤ÃƤǤ¹¤È¥¤¥á¡¼¥¸¤·¤Ë¤¯¤¤¤Ç¤¹¤¬¡¢Ìð¤Î¤è¤¦¤ËÀèü¤Î¤¢¤ë¤â¤Î¤Ç¹Í¤¨¤ë¤È¤ï¤«¤ê¤ä¤¹¤¤¤Ç¤¹¡£
¾åµ­¤Î½èÍý¤Ë¤è¤Ã¤Æ¡¢Êý¸þ + ²óž¤Î¾ðÊó¤ò¤Ä¤«¤¤¡¢Ìð¤ÎÀèü¤ò¥×¥ì¥¤¥ä¡¼¤ÎÈ¿ÂÐÊý¸þ¤Ë¸þ¤±¤Æ(Ũ¦¤ËÌ𤸤ê¤ò)¹ç¤ï¤»¤Æ¤¤¤ë´¶¤¸¤Ç¤¹¡£


¡ã£²¡¥Bullet ¥¯¥é¥¹¡ä


¡¡ÃƤΥץì¥Ï¥Ö¤Ë¥¢¥¿¥Ã¥Á¤¹¤ë¥¯¥é¥¹¤Ç¤¹¡£
Rigidbody ¤òÀ©¸æ¤·¤Æ¡¢ÃƤò°ÜÆ°¤µ¤»¤ëµ¡Ç½¤ò»ý¤Á¤Þ¤¹¡£


using UnityEngine;

public class Bullet : MonoBehaviour
{
    [SerializeField] private float destroyTime = 1.5f;


    /// <summary>
    /// ¥Ð¥ì¥Ã¥Èȯ¼Í
    /// </summary>
    public void Shoot(Vector2 direction, float bulletSpeed)
    {
        if (TryGetComponent(out Rigidbody2D rb))
        {
            rb.AddForce(direction * bulletSpeed);
        }

        Destroy(gameObject, destroyTime);
    }
}


¥µ¥ó¥×¥ë²èÁü

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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