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

¡¡Á°²ó¤Ë°ú¤­Â³¤­¡¢Unity ¤ÎÍÑ°Õ¤·¤Æ¤¤¤ë¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÍøÍѤ·¡¢
Ê£¿ô¼ïÎà¤Î¥¨¥Õ¥§¥¯¥È¤ò¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤Æ¸úΨŪ¤Ë´ÉÍý¤¹¤ë¼êË¡¤ò¼ÂÁõ¤·¤Æ¤¤¤­¤Þ¤¹¡£¡¡

¡¡¥¨¥Õ¥§¥¯¥È¤òÀ¸À®¤·¡¢ÇË´þ¤ò¹Ô¤¦¥µ¥¤¥¯¥ë¤Ï¡¢Æ±¤¸¥¨¥Õ¥§¥¯¥È¤ò·«¤êÊÖ¤·ÍøÍѤ¹¤ë¤³¤È¤ò¹Í¤¨¤ë¤ÈÂçÊÑÌÞÂΤʤ¤½èÍý¤Ç¤¹¡£
¤½¤³¤Ç¤³¤Î¼ê½ç¤Ç¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òºîÀ®¤·¡¢¥¨¥Õ¥§¥¯¥È¤òÇË´þ¤·¤Æ»È¤¤¼Î¤Æ¤ë¤Î¤Ç¤Ï¤Ê¤¯¤Æ¡¢Èóɽ¼¨¤Ë¤·¤Æ¤ª¤¤¤Æ¡¢ºÆÍøÍѤ¹¤ë»ÅÁȤߤòºîÀ®¤·¤Þ¤¹¡£

¡¡¤³¤Á¤é¤Î½èÍý¤ò¼ÂÁõ¤¹¤ë¤Ë¤¢¤¿¤ê¡¢»öÁ°½àÈ÷¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¡¡¡¡¡=>¡¡¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¡
¡¡¡¡¡¡=>¡¡¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤È¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿¥¨¥Õ¥§¥¯¥ÈÊ£¿ô¼ï´ÉÍý­¢

¡¡Àè¤Ë¤³¤Á¤é¤Î½èÍý¤ò¼ÂÁõ¤·¡¢Íý²ò¤ò¿¼¤á¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£



¡¡¿·¤·¤¤³Ø½¬ÆâÍƤϡ¢°Ê²¼¤ÎÄ̤ê¤Ç¤¹¡£

¡¡¡¦¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î³èÍÑ



£±¡¥EffectManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤È¡¢EffectManager ¥¹¥¯¥ê¥×¥È¤òºîÀ®¤¹¤ë

£±¡¥Àß·×


¡¡¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë½èÍý¤ò¹Í¤¨¤¿¾ì¹ç¡¢¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤·¤¿¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¯¥é¥¹Æâ¤ËÀìÍѤÎÊÑ¿ô¤òºîÀ®¤·¡¢
¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤ò¥¢¥µ¥¤¥ó¤·¤Æ¤ª¤¯ÊýË¡¤¬¹Í¤¨¤é¤ì¤Þ¤¹¡£
Î㤨¤Ð PlayerController Æâ¤Ë¥×¥ì¥¤¥ä¡¼¤Ø¤ÎÈïÃÆ»þ¤Î½èÍýÍѤΥ¨¥Õ¥§¥¯¥È¤òÅÐÏ¿¤¹¤ë¤¿¤á¤ÎÊÑ¿ô¤òÍÑ°Õ¤¹¤ë·Á¤Ç¤¹¡£

¡¡¥¨¥Õ¥§¥¯¥È¤Ï¿§¡¹¤Ê¾ì½ê¤ÇÍѤ¤¤é¤ì¤ë¤¿¤á¡¢¤³¤ÎÊýË¡¤Î¾ì¹ç¡¢¿§¡¹¤Ê¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ°Û¤Ê¤ë¥¨¥Õ¥§¥¯¥È¤ò¥¢¥µ¥¤¥ó¤¹¤ë¼ê´Ö¤¬È¯À¸¤·¤Þ¤¹¡£
¿§¡¹¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤ò¸«¤Æ¤¤¤¯ÅÔ¹ç¾å¡¢´ÉÍý¤¬ÈÑ»¨¤Ë¤Ê¤ë¤¿¤á¡¢·ë²Ì¤È¤·¤Æ¥¢¥µ¥¤¥ó˺¤ì¤¬È¯À¸¤·¤¿¤ê¡¢¤½¤ì¤Ëµ¤¤Å¤¯¤Î¤¬ÃÙ¤ì¤Æ¤·¤Þ¤Ã¤¿¤ê¤·¤Þ¤¹¡£



¡¡¤½¤³¤Çº£²ó¤Ï¡¢¥¨¥Õ¥§¥¯¥È´ØÏ¢¤Î½èÍý¤ò¤¹¤Ù¤Æ´ÉÍý¤¹¤ë¤¿¤á¤Î¥Þ¥Í¡¼¥¸¥ã¡¼¥¯¥é¥¹¤È¤·¤Æ EffectManager ¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤Æ¡¢
¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥Èñ°Ì¤ÇÀßÄꤷ¤Æ¤¤¤¿¥¨¥Õ¥§¥¯¥È¾ðÊó¤ò¡¢£±¤Ä¤Î¥¯¥é¥¹¤Ë¤Þ¤È¤á¤Æ´ÉÍý¤¹¤ë¤è¤¦¤ËÀ߷פò¹Í¤¨¤Þ¤¹¡£
¤³¤³¤ÎÃæ¤Ë¡¢¥Ñ¡¼¥Æ¥£¥¯¥ë¤Î¥×¥ì¥Ï¥Ö¤ò¥¨¥Õ¥§¥¯¥È¤È¤·¤ÆºÆÀ¸¤·¤¿¤ê¡¢Ää»ß¤·¤¿¤ê¤¹¤ëÀ©¸æ¤Î¼ÂÁõ¤ò¹Ô¤¤¤Þ¤¹¡£



¡¡EffectManager ¥¹¥¯¥ê¥×¥È¤Ë¤Ï¡¢¥¨¥Õ¥§¥¯¥È¤Ë´ØÏ¢¤¹¤ëµ¡Ç½¤ò¤¹¤Ù¤Æ´ÉÍý¤¹¤ëÌò³ä¤ò»ý¤¿¤»¤Þ¤¹¡£
¤½¤Î¤¿¤á¤³¤ì¤é¤Î¥ª¡¼¥Ç¥£¥ª´Ø·¸¤Î½èÍý¤Ï¡¢¤¤¤Ä¤É¤Î¥¹¥¯¥ê¥×¥È¤Ç¤â¤è¤¤¤è¤¦¤Ë¡¢¥·¥ó¥°¥ë¥È¥ó¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤òºÎÍѤ·¤ÆÀ߷פò¹Ô¤¦¤³¤È¤ò¹Í¤¨¤Þ¤¹¡£

¡¡¥¨¥Õ¥§¥¯¥È¤Ë¸Â¤é¤º¡¢SE ¤Ê¤É¤â¡¢¤¤¤º¤ì¤Î¥¹¥¯¥ê¥×¥È¤«¤é¤Ç¤â¼Â¹ÔÌ¿Î᤬ȯÀ¸¤¹¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤¦¤¤¤Ã¤¿¾ì¹ç¡¢³Æ¥¹¥¯¥ê¥×¥È¤´¤È¤Ë EffectManager ¥¹¥¯¥ê¥×¥È¤ÎÊÑ¿ô¤òÍÑ°Õ¤·¤ÆÂåÆþ½èÍý¤ò¹Ô¤¦¤Î¤Ç¤Ï¡¢Èó¾ï¤ËÏ«ÎϤ¬¤«¤«¤ê¤Þ¤¹¡£
¶²¤é¤¯¤¹¤Ù¤Æ¤Î¥¹¥¯¥ê¥×¥È¤ËÄɲäò¤¹¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦²ÄǽÀ­¤â¤¢¤ê¤Þ¤¹¡£

¡¡¤³¤¦¤¤¤Ã¤¿¥±¡¼¥¹¤Î¾ì¹ç¤Ï¡¢³Æ¥¹¥¯¥ê¥×¥È¤¬ÊÑ¿ô¤òÍÑ°Õ¤·¤ÆÍøÍѤǤ­¤ë¾õÂ֤ˤ¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢
EffectManager ¦¤¬¡¢¤¤¤º¤ì¤Î¥¹¥¯¥ê¥×¥È¤«¤é¡¢¤¤¤Ä¤Ç¤âÍøÍѤ·¤Æ¤âÌäÂê¤Ê¤¤¾õÂ֤ˤ·¤Æ¤ª¤¯À߷פÎÊý¤¬´ÉÍý¤â¥¢¥¯¥»¥¹¤âÍưפˤʤê¤Þ¤¹¡£

¡¡°ìÊý¤«¤é¤Î½èÍý¤ò¹Í¤¨¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢ÁÐÊý¤Î½èÍý¤ò¸«Ä¾¤·¤Æ¡¢¤É¤Î¤è¤¦¤ËÀ߷פò¹Ô¤Ã¤Æ¤ª¤¤¤¿¤Û¤¦¤¬
À衹¤ÎÍøÊØÀ­¤ä½¤Àµºî¶È¡¢´ÉÍý¤¬´Êñ¤«¤Ä¡¢¤ï¤«¤ê¤ä¤¹¤¯¤Ê¤ë¤Î¤«¤ò¡¢Ç°Æ¬¤ËÃÖ¤¤¤ÆÀ߷פò¹Ô¤¦¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£


£²¡¥EffectManager ¥¹¥¯¥ê¥×¥È¤òºîÀ®¤¹¤ë


¡¡¥·¥ó¥°¥ë¥È¥ó¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤ò³èÍѤ·¡¢EffectManager ¤òºîÀ®¤·¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹Æâ¤Ë Unity ¤ÇÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÁȤߤ³¤ß¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢°ìÅÙÀ¸À®¤·¤¿¥¨¥Õ¥§¥¯¥ÈÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò»È¤¤¼Î¤Æ¤»¤º¤ËºÆÍøÍѤ¹¤ë¤³¤È¤Ç¡¢¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤Î¸þ¾å¤¬´üÂԤǤ­¤Þ¤¹¡£

¡¡ÊÑ¿ô¤ä¥á¥½¥Ã¥É¤â¿¤¯¡¢½èÍý¤âÊ£»¨¤Ç¤¹¤Î¤Ç¡¢½èÍý¤òµ­½Ò¤·¤ÆËþ­¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢
¤É¤Î½èÍý¤¬¤É¤Î¤è¤¦¤ËÆ°¤¤¤Æ¤¤¤ë¤«¡¢¤É¤Î½èÍý¤È½èÍý¤¬¤Ä¤Ê¤¬¤Ã¤Æ¤¤¤ë¤«¤ò¤·¤Ã¤«¤ê¤ÈÉû¼ï¤·¤Æ¡¢½èÍý¤òÇÄ°®½ÐÍè¤ë¤è¤¦¤Ë¤·¤Þ¤·¤ç¤¦¡£
½èÍý¤ÎÆâÍƤ¬¤ï¤«¤é¤Ê¤¤¤Þ¤Þ¤À¤È¡¢¼«Ê¬¤Ç½¤Àµºî¶È¤¬¹Ô¤¨¤Ê¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¦¤¿¤á¤Ç¤¹¡£


¡¡¤Ê¤ª­¡¤È­¢¤Î½èÍý¤Ï¥¨¥Õ¥§¥¯¥È¤ÎºÆÀ¸»þ´Ö¤òÀßÄꤹ¤ëµ¡Ç½¤Ç¤¹¡£
ºÆÀ¸»þ´Ö¤«¤é¼«Æ°¤ÇÀßÄꤹ¤ë¾ì¹ç¤Ë¤Ï­¡¡¢¼êÆ°¤Ç¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ËÆþÎϤ·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï­¢¡¢¤¤¤º¤ì¤«¤ò¼ÂÁõ¤·¤Æ¤¯¤À¤µ¤¤¡£


EffectManager.cs




¡¡¥¹¥¯¥ê¥×¥È¤òºîÀ®¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£

¡¡¤³¤³¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÍѤ˥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î½é´ü²½¡¢
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤È¤·¤ÆºîÀ®¤·¤¿¥¨¥Õ¥§¥¯¥ÈÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¼èÆÀ¡¦ÊֵѤò¹Ô¤¦¤è¤¦¤Ë¤·¤Þ¤·¤¿¡£



¡¡Dictionary ¤Î Key ¤Ï EffectName ¤Ç¤â¼ÂÁõ²Äǽ¤Ç¤¹¡£
¤½¤Î¾ì¹ç¤Î EffectManager ¤Ï¡¢²¼µ­¤ÎÄ̤ê¤Ë¤Ê¤ê¤Þ¤¹¡£


EffectManager.cs




£³¡¥¡ã¥·¥ó¥°¥ë¥È¥ó¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¡ä


¡¡¤³¤Á¤é¤Î¥¯¥é¥¹¤Ï¥·¥ó¥°¥ë¥È¥ó¡¦¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¥·¥ó¥°¥ë¥È¥ó¤Ë¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤¤¤º¤ì¤Î¥¯¥é¥¹¤«¤é¤Ç¤â¥¨¥Õ¥§¥¯¥È¤ò¸«¤Ä¤±¤ëÌ¿Îᤷ¤ä¤¹¤¤À߷פˤ·¤Æ¤¤¤Þ¤¹¡£



¡¡¥·¥ó¥°¥ë¥È¥ó¤È¤Ï¡¢¿ô¿¤¯¤¢¤ë¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î£±¤Ä¤Ç¤¹¡£¤½¤Î¥¯¥é¥¹¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬É¬¤º£±¤Ä¤Ç¤¢¤ë¤³¤È¤òÊݾڤ¹¤ë¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î¤³¤È¤ò¸À¤¤¤Þ¤¹¡£

¡¡EffectManager¥¯¥é¥¹¤Ç¤Ï¡¢¤³¤Î¥·¥ó¥°¥ë¥È¥ó¤òºÎÍѤ·¤Æ¤¤¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¥²¡¼¥àÃæ¤òÄ̤¸¤Æ¡¢¤³¤ÎEffectManager¥¯¥é¥¹¤¬£±¤Ä¤·¤«Â¸ºß¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
¼ÂÁõÎã¤ÏÊ£¿ô¤¢¤ê¤Þ¤¹¤¬¡¢°ìÈÖÆɤߤ䤹¤¤Êý¼°¤Çµ­½Ò¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î¥·¥ó¥°¥ë¥È¥ó¤Ë¤è¤Ã¤Æ¥¤¥ó¥¹¥¿¥ó¥¹¤¬£±¤Ä¤«À¸À®¤µ¤ì¤Ê¤¤¤³¤È¤¬Êݾڤµ¤ì¤Þ¤¹¤Î¤Ç¡¢¤³¤ÎEffectManager¥¯¥é¥¹¤Ø¤Î»²¾È¤Ï¡¢¤¤¤º¤ì¤Î¥¯¥é¥¹¤«¤é¤Ç¤¢¤Ã¤Æ¤âÊÑ¿ô¤ò²ð¤µ¤º¤Ë»²¾È¤ò¹Ô¤¨¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡Î㤨¤Ð¡¢Enemy¤È¤¤¤¦¥¯¥é¥¹¤¬¤¢¤ê¡¢¤½¤ÎEmeny¥¯¥é¥¹¤ò»ý¤Ä¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬£µ¤Ä¤¢¤Ã¤¿¾ì¹ç¡¢¡Ö¤É¤Î¡×Enemy¥¯¥é¥¹¤Ç¤¢¤ë¤«¤ò³ÎÄê¤Ç¤­¤Ê¤¤¤È¡¢ÂоݤȤʤëEnemy¥¯¥é¥¹¤Ø¤Ï»²¾È¤Ç¤­¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢Enemy·¿¤ÎÊÑ¿ô¤òÍÑ°Õ¤·¤Æ¡¢¤½¤ÎÊÑ¿ô¤Ø»²¾È¤·¤¿¤¤Enemy¥¯¥é¥¹¤òÂåÆþ¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¡¢¤Ï¤¸¤á¤ÆEnemy¥¯¥é¥¹¤Î¾ðÊó¤ò°·¤¦¤³¤È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤Ç¤¹¤¬¥·¥ó¥°¥ë¥È¥ó¤Ç¤¢¤ëEffectManager¥¯¥é¥¹¤Î¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï¾ï¤Ë£±¤Ä¤·¤«¤Ê¤¤¤³¤È¤¬Êݾڤµ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¡Ö¤É¤Î¡×¤È¤¤¤¦»ØÄê¤ÎÉôʬ¤¬ÉÔÍפˤʤê¤Þ¤¹¡£
¤Ä¤Þ¤êÊÑ¿ô¤Ø¤ÎÂåÆþ¤¬ÉÔÍפˤʤê¤Þ¤¹¡£
EffectManager¤È¤¤¤¦»ØÄê¤Ï¤¹¤Ê¤ï¤Á¡¢¼«Æ°Åª¤Ë¤¿¤À£±¤Ä¤ÎEffectManager¤Ø¤Î»²¾È¤¬¹Ô¤ï¤ì¤Þ¤¹¡£


£²¡¥¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë


¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤È¤Ï¡¢¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î£±¤Ä¤Ç¤¹¡£

¡¡¤½¤Î³µÇ°¤ò¥²¡¼¥àÆâ¤Ç¤âÍøÍѤǤ­¤ë¤è¤¦¤Ë Unity ¤ÎÍÑ°Õ¤·¤Æ¤¤¤ëµ¡Ç½¤Î£±¤Ä¤Ç¤â¤¢¤ê¤Þ¤¹¡£
°ÊÁ°¤Ï¼«ºî¤·¤ÆÍøÍѤ·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢Unity 2021 ¤è¤ê¡¢Unity ¤Îɸ½àµ¡Ç½¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Þ¤·¤¿¡£


»²¹Í¥µ¥¤¥È
Unity ¸ø¼°¥Þ¥Ë¥å¥¢¥ë
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë
¡ÚUnity¡Û¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¡ÊObject Pool¡Ë¤Î»È¤¤Êý¡ªUnity2021¤«¤éɸ½à¤Ç»È¤¨¤ë¤¾
Zenn twugoÍÍ
(Èó¸ø¼°ÏÂÌõ¡ËUnity - level up your code with game programming patterns¡¡Chapter 05¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¡ÊObject Pool¡Ë
¡ÚUnity¡ÛUnity¸ø¼°¤ÎObjectPool¤ò»È¤Ã¤Æ¤ß¤ë(ÆâÉô¼ÂÁõ¤â°ìÉô¾Ò²ð)


£±¡¥¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î½é´ü²½


¡¡¥³¥ó¥¹¥È¥é¥¯¥¿¥á¥½¥Ã¥É¤òÄêµÁ¤·¤Þ¤¹¡£
¤³¤ÎÉôʬ¤Ë¤ª¤±¤ë½é´ü²½¤È¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÀßÄꤹ¤ë¡¢¤È¤¤¤¦°ÕÌ£¹ç¤¤¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÉôʬ¤Ç¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤·¤Æ¤¤¤ëÌõ¤Ç¤Ï¤Ê¤¯¡¢¤É¤Î¤è¤¦¤ÊµóÆ°¤ò¤¹¤ë¤Î¤«¤ò·è¤á¤ë¡¢¤È¤¤¤¦ÆâÍƤνé´ü²½½èÍý¤Ç¤¹¡£


»²¹Í¥µ¥¤¥È
Unity ¸ø¼°¥É¥­¥å¥á¥ó¥È
ObjectPool T0 Constructor



¡¡¡¡¡¡¡¡// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î½é´üÀßÄê¡£new ¤À¤¬¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤ëÌõ¤Ç¤Ï¤Ê¤¤
        PoolBase pool = new ObjectPool<PoolBase>(
            createFunc: () => CreateEffect(effectPrefab),
            actionOnGet: OnGetFromPool,
            actionOnRelease: target => target.gameObject.SetActive(false),
            actionOnDestroy: target => Destroy(target.gameObject),
            collectionCheck: true,
            defaultCapacity: 10,
            maxSize: 1000);

¡¡ObjectPool ¤Ï¥¸¥§¥Í¥ê¥Ã¥¯<T>¤Ç¤¹¤Î¤Ç¡¢ÍøÍѤ¹¤ë¤È¤­¤Ë·¿¤ò»ØÄꤷ¤Þ¤¹¡£
¤³¤³¤Ç¤Ï BulletBase ·¿¤Ë¤·¤Æ¤¤¤Þ¤¹¡£Ãê¾Ý²½¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢ÆÃÄê¤ÎÃƤǤϤʤ¯¡¢ÃƤǤ¢¤ì¤Ð¤É¤ì¤Ç¤â¡¢¤È¤¤¤¦ÍøÍÑÊýË¡¤¬½ÐÍè¤Þ¤¹¡£

¡¡°ú¿ô¤Ï£·¤Ä¤¢¤ê¡¢¤½¤ì¤¾¤ì¤Ë»ØÄꤵ¤ì¤¿ÃͤòÀßÄꤷ¤Æ¤¤¤¯¤³¤È¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎµóÆ°¤òºî¤ê¤Þ¤¹¡£

¡¡¤³¤ÎÎã¤Ç¤Ï³Æ°ú¿ô¤Ë¤Ä¤¤¤Æ̾Á°ÉÕ¤­°ú¿ô¤Îµ¡Ç½¤òÍøÍѤ·¤Æ½ñ¤­¹þ¤ó¤Ç¤¤¤Þ¤¹¤¬¡¢ÃͤÀ¤±¤òµ­½Ò¤·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£


»²¹Í¥µ¥¤¥È
MicroSoft
̾Á°ÉÕ¤­°ú¿ô¤È¾Êά²Äǽ¤Ê°ú¿ô (C# ¥×¥í¥°¥é¥ß¥ó¥° ¥¬¥¤¥É)


£²¡¥Âè1¡Á4°ú¿ô


¡¡Âè1¡Á4°ú¿ô¤Þ¤Ç¤Ï¡¢ÆÃÄê¤Î¥¤¥Ù¥ó¥ÈȯÀ¸»þ¤Î¼Â¹Ô½èÍý¤òÀßÄꤷ¤Þ¤¹¡£OnTriggerEnter ¥á¥½¥Ã¥É¤Ê¤É¤Î¥³¡¼¥ë¥Ð¥Ã¥¯½èÍý¤Î¥¤¥á¡¼¥¸¤Ç¤¹¡£
¡Ö¤³¤¦¤¤¤¦¾õÂ֤ˤʤ俤é(ÆÃÄê¤Î¥¤¥Ù¥ó¥ÈȯÀ¸¤·¤¿¤é)¡×¢Í¡ÖÀßÄꤷ¤¿(ɳÉÕ¤±¤·¤¿)½èÍý¤ò¼Â¹Ô¤¹¤ë¡×¤È¤¤¤¦¥Ñ¥¿¡¼¥ó¤Ç¤¹¡£
¤³¤Î¤¦¤Á¡¢¡ÖÀßÄꤷ¤¿(ɳÉÕ¤±¤·¤¿)½èÍý¤ò¼Â¹Ô¤¹¤ë¡×¤ÎÉôʬ¤Ï¥Ç¥ê¥²¡¼¥È¤Ë¤Ê¤Ã¤Æ¤ª¤ê¡¢¥é¥à¥À¼°¤Ë¤è¤ëƿ̾¥á¥½¥Ã¥É¤¬ÍøÍѤǤ­¤Þ¤¹¡£



¡¡Âè1°ú¿ô¤Ï createFunc ¤Ç¤¹¡£¤³¤ì¤Ï¡¢IObjectPool.Get() ¥á¥½¥Ã¥É¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤³¤Î Get ¥á¥½¥Ã¥É¤ÏÆâÉô¤Ç¼«Æ°Ê¬´ô¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¼¡¤ÎÂè2°ú¿ô¤ËÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¤½¤·¤Æ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤¬¤Ê¤¤¾ì¹ç¤Ë¡¢¤³¤ÎÂè1°ú¿ô¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

¡¡¤³¤ì¤Ï Func<T> ·¿¤Ç¤¹¡£¤³¤³¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂФ·¤ÆÀ¸À®¤ÎÌ¿Î᤬¤­¤¿¾ì¹ç¤ÎµóÆ°¤òÀßÄꤷ¤Þ¤¹¡£
¼ç¤Ë¥×¡¼¥ë¤¬¶õ¤Î¤È¤­¤Ë¿·¤·¤¤¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤ëµ¡Ç½¤òÀßÄꤷ¤Þ¤¹¡£
() => Create() ¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢À¸À®Ì¿Î᤬¤­¤¿¾ì¹ç¤Ë¤Ï Create ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£

¡¡Âè2°ú¿ô°Ê¹ß¤âƱÍͤǤ¹¡£ÆÃÄê¤Î¥¤¥Ù¥ó¥È¤Ëɳ¤Å¤±¤ë·Á¤Ç¥Ç¥ê¥²¡¼¥È¤òÀßÄꤷ¤Æ¤¤¤­¤Þ¤¹¡£



¡¡Âè2°ú¿ô¤Ï actionOnGet ¤Ç¤¹¡£¤³¤ì¤Ï¡¢IObjectPool.Get() ¥á¥½¥Ã¥É¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡¤³¤Á¤é¤Ï Action<T> ·¿¤Ç¤¹(Ìá¤êÃͤ¬¤¢¤ê¤Þ¤»¤ó)¡£
¤³¤³¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¥×¡¼¥ë¤µ¤ì¤ÆÈóɽ¼¨¤Î¾õÂ֤ˤʤäƤ¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ò¼è¤ê½Ð¤¹ºÝ¤Î½èÍý¤òÀßÄꤷ¤Þ¤¹¡£
OnGetFromPool ¥á¥½¥Ã¥É¤ò»ØÄꤷ¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¼è¤ê½Ð¤·Ì¿Î᤬Í褿¤é¡¢OnGetFromPool ¥á¥½¥Ã¥É¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£



¡¡Âè3°ú¿ô¤Ï actionOnRelease ¤Ç¤¹¡£¤³¤ì¤Ï IObjectPool.Release() ¥á¥½¥Ã¥É¤Ë¤è¤ê¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡¤³¤Á¤é¤â Action<T> ·¿¤Ç¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÈƱ¤¸·¿¤òÂè1°ú¿ô¤Ë¼è¤ê¤Þ¤¹¡£º£²ó¤Ç¤¢¤ì¤Ð BulletBase ·¿¤Î¾ðÊó¤ò»ØÄꤷ¤Þ¤¹¡£

¡¡¤³¤³¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÌ᤹̿Î᤬Í褿¤È¤­¤Î½èÍý¤òÀßÄꤷ¤Þ¤¹¡£
target => target.gameObject.SetActive(false) ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢°ú¿ô¤Ç¼õ¤±¤¿ target (º£²ó¤Ï BulletBase ·¿)¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò SetActive ¥á¥½¥Ã¥É¤òÍøÍѤ·¤ÆÈóɽ¼¨¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥ª¥Ö¥¸¥§¥¯¥È¤¬ºÆÅÙ¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÌá¤ê¡¢¥×¡¼¥ë¤µ¤ì¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤Ë¥Ç¥ê¥²¡¼¥ÈÉôʬ¤Ë¤Ï¡¢¥á¥½¥Ã¥É¤À¤±¤Ç¤Ï¤Ê¤¯¡¢½èÍý¤¬1¹Ô¤Ç¤¢¤ë¾ì¹ç¤Ë¤Ï¥é¥à¥À¼°¤òÍøÍѤ·¤Æ¡¢Ä¾ÀܽèÍý¤òµ­½Ò¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¡£



¡¡Âè4°ú¿ô¤Ï actionOnDestroy ¤Ç¤¹¡£¤³¤Á¤é¤â Action<T> ·¿¤Ç¤¹¡£
¤³¤ì¤Ë¤ÏľÀܤμ¹ÔÌ¿Îá¤Ï¤Ê¤¯¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬Âè7°ú¿ô¤ÇÀßÄꤹ¤ë maxSize¤Ë㤷¤¿ºÝ(¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¡¼¥ë¤ËÌ᤻¤Ê¤«¤Ã¤¿¤È¤­)¤Ë¼«Æ°Åª¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë½èÍý¤òÀßÄꤷ¤Þ¤¹¡£
¥×¡¼¥ë¤«¤é¤¢¤Õ¤ì¤Æ¤·¤Þ¤Ã¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ËÂФ·¤Æ¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¤Î¤Ç¡¢¼ç¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÇ˲õ½èÍý¤òÀßÄꤷ¤Þ¤¹¡£
target => Destroy(target.gameObject) ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢°ú¿ô¤Ç¼õ¤±¤¿ target ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÇ˲õ¤·¤Þ¤¹¡£
¤³¤Î¾ì¹ç¡¢¤³¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ï¥×¡¼¥ë¤µ¤ì¤º¤ËÇË´þ¤µ¤ì¤Þ¤¹¡£

¡¡¤¤¤º¤ì¤Î¾ì¹ç¤â¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¤ÎÌ¿Îá¤Ë¤è¤ê¡¢¤¤¤º¤ì¤«¤Î¥¤¥Ù¥ó¥È¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£


£³¡¥Âè5¡Á7°ú¿ô


¡¡Âè5¡Á7°ú¿ô¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎÀßÄêÃͤǤ¹¡£



¡¡Âè5°ú¿ô¤Ï collectionCheck ¤Ç¤¹¡£bool ·¿¤Ç¤¹¡£¥Á¥§¥Ã¥¯µ¡Ç½¤Î¥ª¥ó¥ª¥ÕÀÚ¤êÂؤ¨¤Ç¤¹¡£¤³¤³¤Ç¤Ï true ¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
true ¤ËÀßÄꤷ¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¥×¡¼¥ë¤ËÌᤵ¤ì¤ë¤È¤­¤Ë¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¥×¡¼¥ë¤ËÌ᤹ºÝ¡¢Æ±°ì¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«Ä´¤Ù¡¢¤¹¤Ç¤ËÅÐÏ¿¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Îã³°¤¬¥¹¥í¡¼¤µ¤ì¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤Ï¥¨¥Ç¥£¥¿¡¼¤Ç¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹¡£



¡¡Âè6°ú¿ô¤Ï defaultCapacity ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 10 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥×¡¼¥ë¤ÇÍøÍѤ¹¤ë¥³¥ì¥¯¥·¥ç¥ó¤Î½é´üµöÍÆÎ̤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£



¡¡Âè7°ú¿ô¤Ï maxSize ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 1000 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎºÇÂ祵¥¤¥º¤Ç¤¹¡£¤³¤ÎÃͤ¬¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÊÝ»ý¤Ç¤­¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁí¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬ºÇÂ祵¥¤¥º¤Ë㤹¤ë¤È¡¢¥×¡¼¥ë¤ËÊÖ¤µ¤ì¤¿¤½¤ì°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï̵»ë¤µ¤ì¡¢¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÃͤòŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¥×¡¼¥ë¤Î¥µ¥¤¥º¤¬Èó¾ï¤ËÂ礭¤¯¤Ê¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


£µ¡¥EffectManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¤Æ¡¢EffectManager ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¡¢ÀßÄê¤ò¹Ô¤¦


¡¡¥Ò¥¨¥é¥ë¥­¡¼¤Î¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤òÁªÂò¤·¤Æ±¦¥¯¥ê¥Ã¥¯¤ò¤·¤Æ¥á¥Ë¥å¡¼¤ò³«¤­¡¢Create Empty ¤òÁªÂò¤·¤Æ¶õ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ò£±¤ÄºîÀ®¤·¤Þ¤¹¡£
̾Á°¤ò EffectManager ¤ËÊѹ¹¤·¤Þ¤¹¡£

¡¡Àè¤Û¤ÉºîÀ®¤·¤¿ EffectManager ¥¹¥¯¥ê¥×¥È¤ò¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Æ¥¢¥¿¥Ã¥Á¤·¤Æ¤¯¤À¤µ¤¤¡£



¡¡Â³¤±¤Æ EffectManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÁªÂò¤·¤Æ¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ë¤Æ EffectManager ¥¹¥¯¥ê¥×¥È¤Î¥¢¥¿¥Ã¥Á¤ò³Îǧ¤·¡¢ÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡EffectDataSO ÊÑ¿ô¤Ë¡¢Datas ¥Õ¥©¥ë¥À¤Ë¤¢¤ë EffectDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥É¥é¥Ã¥°¥¢¥ó¥É¥É¥í¥Ã¥×¤·¤Æ¥¢¥µ¥¤¥ó¤·¤Þ¤¹¡£
¾¤ÎÉôʬ¤Ï¤½¤Î¤Þ¤Þ¤ÇÌäÂꤢ¤ê¤Þ¤»¤ó¡£


EffectManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡¡¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü



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


£³¡¥ÍøÍÑÎã

£±¡¥Àß·×


¡¡EffectManager ¥¯¥é¥¹¤Ï¡¢¥·¥ó¥°¥ë¥È¥ó¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Ë¤è¤Ã¤ÆºîÀ®¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¥¢¥µ¥¤¥ó¤ä¥¯¥é¥¹¤Î»²¾È¤ÏÉÔÍסÊGetComponent ÉÔÍסˤǡ¢¤¤¤º¤ì¤Î¥¹¥¯¥ê¥×¥È¤«¤é¤Ç¤â¼«Í³¤Ë»²¾È¤·¤Æ¡¢¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£

¡¡¥¨¥Õ¥§¥¯¥ÈºÆÀ¸¤Î¤¿¤Ó¤Ë¡¢³Æ¥¹¥¯¥ê¥×¥ÈÆâ¤Ë EffectManager ¥¹¥¯¥ê¥×¥È¤ÎÊÑ¿ô¤òÍÑ°Õ¤·¤Æ¼èÆÀ¤ò¤·¤Æ¤¤¤ë¤È¡¢
Î㤨¤Ð¡¢¥¨¥Í¥ß¡¼¤Î¹¶·â¤Ë¹ç¤ï¤»¤Æ¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤·¤¿¤¤¤È¤Ê¤Ã¤¿¾ì¹ç¡¢À¸À®¤µ¤ì¤ë¤¿¤Ó¤Ë EffectManager ¥¹¥¯¥ê¥×¥È¤Î»²¾È¤ò¼èÆÀ¤¹¤ëɬÍפ¬À¸¤Þ¤ì¤Þ¤¹¡£

¡¡¤³¤¦¤¤¤Ã¤¿¡ÚÊ£¿ô¤Î¥¹¥¯¥ê¥×¥È¤«¤é»²¾È¤µ¤ì¤ëÍÑÅÓ¤¬¤¢¤ê¡¢ÈÆÍÑŪ¤ËÍøÍѤµ¤ì¤ë¾ðÊó¡Û¤Ë¤Ä¤¤¤Æ¤Ï¡¢
¥·¥ó¥°¥ë¥È¥ó¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤òºÎÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢³Æ¥¹¥¯¥ê¥×¥ÈÆâ¤Ë¿·¤·¤¤ÊÑ¿ô¤òÄɲ乤ëɬÍפâ¤Ê¤¯¤Ê¤ê¡¢
¥¨¥Õ¥§¥¯¥È¤ÎºÆÀ¸½èÍý¤Ë¤Ä¤¤¤Æ¤â¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ëÌ¿Îáʸ¤ò£±¹Ôµ­½Ò¤¹¤ì¤ÐºÑ¤ß¤Þ¤¹¡£



¡¡EffectManager ¥¯¥é¥¹¤Ëµ­½Ò¤·¤¿¥á¥½¥Ã¥É¤Ï¡¢¡Ú¥¯¥é¥¹Ì¾.¥¯¥é¥¹¤ÎÂåÆþ¤µ¤ì¤Æ¤¤¤ëÊÑ¿ô̾.¼Â¹Ô¤·¤¿¤¤ÊÑ¿ô̾¤«¥á¥½¥Ã¥É̾(°ú¿ô¤Î»ØÄê)¡Û¤Î½ñ¼°¤Çµ­½Ò¤·¤Þ¤¹¡£

¡¡º£²ó¤Î¾ì¹ç¤Ç¤¢¤ì¤Ð¡¢¥¨¥Õ¥§¥¯¥È¤ò»ÈÍѤ·¤¿¤¤»þ¤Ï GetEffect ¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤·¡¢ÉÔÍפˤʤ俥ѡ¼¥Æ¥£¥¯¥ë¤Ï Release ¥á¥½¥Ã¥É¤Ç¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌᤷ¤Þ¤¹¡£

¡¡¤³¤Î¼êË¡¤òÍøÍѤ¹¤ë¤³¤È¤Ë¤è¤ê¡¢É¬Íפˤʤä¿¥¨¥Õ¥§¥¯¥È¤¬¤Ê¤¤¾ì¹ç¤À¤±¡¢¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¡Ê¥Ñ¡¼¥Æ¥£¥¯¥ë¤äAnimator¡Ë¤òºîÀ®¤·¡¢
¤¹¤Ç¤ËÉÔÍפȤʤäƥª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÂÔµ¡¤·¤Æ¤¤¤ë¥¨¥Õ¥§¥¯¥È¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤òºÆÍøÍѤ¹¤ë¤³¤È¤Ç¡¢Ëè²ó¤Î¥¨¥Õ¥§¥¯¥È¤ÎÀ¸À®½èÍý¤ò»ß¤á¤Æ¡¢¸úΨ²½¤·¤Æ¤¤¤Þ¤¹¡£

¡ã¥·¥ó¥°¥ë¥È¥ó¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤Î¼Â¹ÔÌ¿Îá¡ä
  EffectManager.instance.GetEffect(EffectName.Hit);

¡¡°ú¿ô¤Ë EffectName ¤ò»ØÄꤹ¤ë¤³¤È¤Ë¤è¤ê¡¢»ØÄꤷ¤¿ EffectName ¤ÎÀßÄꤵ¤ì¤Æ¤¤¤ë EffectData ¤¬»²¾È¤µ¤ì¤Æ¡¢
¤½¤Î¥¯¥é¥¹Æâ¤Ë¥¢¥µ¥¤¥ó¤µ¤ì¤Æ¤¤¤ë¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤òÍøÍѤ¹¤ëÀ߷פˤʤäƤ¤¤Þ¤¹¡£



¡¡¤½¤ì¤Ç¤Ï¥ì¥Ù¥ë¥¢¥Ã¥×¤ÎºÝ¤Î¡¢¼ÂºÝ¤Î¼ÂÁõÎã¤Ç¤¹¡£

¡¡GetEffect ¥á¥½¥Ã¥É¤ÏÌá¤êÃͤȤ·¤Æ ValueTuple ·¿¤Î¾ðÊó¤òÌᤷ¤Þ¤¹¤Î¤Ç¡¢
¼õ¤±¼è¤ë¦¤â ValueTuple ·¿¤ÇÊÑ¿ô¤òÍÑ°Õ¤·¤Þ¤¹¡£

¡¡­¡¤È­¢¤Î½èÍý¤Ï¡¢¼«Ê¬¤Î EffectData ¤Î¹½Â¤¤Ë¹ç¤ï¤»¤ÆÍøÍÑÊýË¡¤òÊѤ¨¤Þ¤¹¤Î¤Ç¡¢¤¤¤º¤ì¤«¤ÎÌ¿Îá¤òºÎÍѤ·¤Þ¤¹¡£


// EffectDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥ÈÆâ¤Î EffectData ¤Î enum ¤È¾È¹ç¤¹¤ë¤¿¤á¤ÎÃÍ
public EffectName effectName = EffectName.LevelUp;

// EffectDataSO ¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥ÈÆâ¤Î EffectData ¤Î Index ¤È¾È¹ç¤¹¤ë¤¿¤á¤ÎÃÍ
public const int LEVEL_UP_EFFECT_INDEX = 501;

// ¥¨¥Õ¥§¥¯¥È¤ÎºÆÀ¸Àè¡£¤³¤³¤Ç¤Ï¥×¥ì¥¤¥ä¡¼¤ÎÁÛÄê
public Transform targetTran;


// ¥ì¥Ù¥ë¥¢¥Ã¥×±é½Ð
{
    // ­¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¥ì¥Ù¥ë¥¢¥Ã¥×ÍѤΥ¨¥Õ¥§¥¯¥È¤ò EffectName ¤ò»ØÄꤷ¤Æ¼è¤ê½Ð¤·
    (EffectPlayerBase levelUpEffect, float duraion) = EffectManager.instance.GetEffect(effectName);

    // ­¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¥ì¥Ù¥ë¥¢¥Ã¥×ÍѤΥ¨¥Õ¥§¥¯¥È¤ò Index ¤ò»ØÄꤷ¤Æ¼è¤ê½Ð¤·
    (EffectPlayerBase levelUpEffect, float duraion) = EffectManager.instance.GetEffect(LEVEL_UP_EFFECT_INDEX);

    // ¥¨¥Õ¥§¥¯¥È¤òɽ¼¨¤¹¤ë°ÌÃÖ¤òÄ´À°
    Vector3 effectPos = new(targetTran.position. x, targetTran.position. y + offset, targetTran.position. z);

    var token = PlayerManager.instance.GetCancellationTokenOnDestroy();

    // ¥×¥ì¥¤¥ä¡¼¤Î­¸µ¤ÇºÆÀ¸
    levelUpEffect.PlayEffect(duraion, effectPos, token).Forget();
}


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


¡¡¼ÂºÝ¤Ë½èÍý¤ò½ñ¤¤¤Æ¡¢Æ°¤«¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡ª

¡¡¤¤¤Þ¤Þ¤Ç¸ÄÊ̤Υ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤ËÅÐÏ¿¤·¤Æ¤¤¤¿¥¨¥Õ¥§¥¯¥È¤ÎÊÑ¿ô¤¬¤¢¤ì¤Ð¡¢°ìö¤½¤Á¤é¤ò¥³¥á¥ó¥È¥¢¥¦¥È¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢¥¨¥Õ¥§¥¯¥È¤ÎºÆÀ¸½èÍý¤ÎÉôʬ¤ò¡¢ÀèÄø»È¤¤Êý¤ò¾Ò²ð¤·¤¿ EffectManager ¤«¤é¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë½èÍý¤ËÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£


¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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