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

¡¡£²£Ä¥²¡¼¥à¤Ë¤ª¤¤¤Æ¡¢ÃƤÎÀ¸À®µ¡Ç½¤Ë´Ø¤·¤Æ¤ÎȯŸÎã¤Ç¤¹¡£
¼ÂÁõ¤¹¤ë½èÍý¤¬Â¿¤¤¤¿¤á¡¢£²²ó¤Î¼ê½ç¤Ëʬ¤±¤Þ¤¹¡£



¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò»È¤¤¡¢Æ±¤¸ÃƤò¥ê¥µ¥¤¥¯¥ë¤·¤Æ·«¤êÊÖ¤·ÍøÍѤ¹¤ëÊýË¡¤ËÃÖ¤­´¹¤¨¤Þ¤¹¡£

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ï¡¢ºÆÍøÍѲÄǽ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥»¥Ã¥È¤ò´ÉÍý¤¹¤ë»ÅÁȤߤǤ¹¡£
¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆâ¤ÇÉÑÈˤËÀ¸À®¤ÈÇË´þ¤ò¹Ô¤¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¡¼¥ë(Èóɽ¼¨²½)¤·¤Æ¤ª¤­¡¢
À¸À®¤ÈÇË´þ¤ÎÂå¤ï¤ê¤ËºÆÍøÍÑ(ºÆɽ¼¨)¤¹¤ë¤³¤È¤Ç¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ò¸þ¾å¤µ¤»¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£



¡¡¤³¤ÎÎã¤Ç¤Ï¡¢¤¹¤Ç¤ËºîÀ®¤·¤Æ¤¤¤ëµ¡Ç½¤ÎÆâ¡¢¸øž¤¹¤ëÃƤÎÀ¸À®¤Èºï½ü¤Î½èÍý¤ò¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤¿¤â¤Î¤ò¾Ò²ð¤·¤Þ¤¹¡£
Ʊ»þ¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ä¥¯¥é¥¹¤Î·Ñ¾µ¤òÍøÍѤ·¤Æ¡¢½èÍý¤ÎÃê¾Ý²½¤â¹Ô¤¤¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢¥²¡¼¥à²èÌ̾å¤Îɽ¸½¤ÏÊѤï¤ê¤Þ¤»¤ó¤¬¡¢ÆâÉôŪ¤Ê½èÍý¤Ï¤«¤Ê¤êÊѤï¤ê¤Þ¤¹¡£


¡ã¼ÂÁõÆ°²è¡¼¥Ü¥¿¥ó¤ò²¡¤¹¤È¥×¥ì¥¤¥ä¡¼¤Î¿Ê¹ÔÊý¸þ¤ËÃƤò¤Þ¤È¤á¤ÆÅê¼Í¤¹¤ë¡¼¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯


¡¡»öÁ°¤ËÁ°²ó¤Î¼ê½ç¤Î³Ø½¬¤È¼ÂÁõ¤¬É¬Íפˤʤê¤Þ¤¹¡£

¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øž¤¹¤ëÃƤε¡Ç½­¡
¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øž¤¹¤ëÃƤε¡Ç½­¢

¡¡¡¡=>¡¡¡Ú£²£Ä¡ÛÃÆÀ©¸æÍÑ¥¯¥é¥¹¤ÎÀ߷ץǥ¶¥¤¥ó¤ÈÃê¾Ý²½
¡¡¡¡=>¡¡¡Ú£²£Ä¡ÛÃÆÀ¸À®ÍÑ¥¯¥é¥¹¤ÎÀ߷ץǥ¶¥¤¥ó¤ÈÃê¾Ý²½



£±¡¥Àß·×


¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÎÂоݤÏÀû²ó¤¹¤ëÃƤòÅê¼Í¤¹¤ëºÝ¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡¤¤¤Þ¤Þ¤Ç¤ÏÅê¼Í¤µ¤ì¤¿Àû²ó¤¹¤ëÃƤϡ¢Åê¼Í¸å¤ËÇ˲õ¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ÎÉôʬ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ç´ÉÍý¤·¤Þ¤¹¡£
¤³¤Î¼êË¡¤òÍѤ¤¤¿¾ì¹ç¡¢Àû²ó¤¹¤ëÃƤÏÇ˲õ¤µ¤ì¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢Èóɽ¼¨¤Î¾õÂ֤ˤʤꡢ¥×¡¼¥ë¤µ¤ì¤Þ¤¹¡£

¡¡Åê¼Í¤¹¤ë½èÍý¤ËÍøÍѤ·¤Æ¤¤¤ë ThrowingBullet ¤Ï¡¢Àû²ó¤¹¤ëÃƤò´ÉÍý¤¹¤ë¤¿¤á¤ÎÆþ¤ìʪ¤Ç¤¢¤ë¤¿¤á¡¢
¤³¤Á¤é¤Ï¤½¤ÎÅÔÅÙÇ˲õ¤·¤Æ¡¢À¸À®¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£


¡þ¡¡£±¡¥OrbitingBullet(Àû²ó¤¹¤ëÃÆ) ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¼è¤ê½Ð¤·¤Æ²èÌ̤Ëɽ¼¨¤¹¤ë
¡¡¡¡¡¡¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¤Ê¤¤¾ì¹ç¤Î¤ß¡¢¿·¤·¤¯À¸À®¤¹¤ë

¡¡¡¡£²¡¥ThrowingBullet ¤òÀ¸À®¤·¡¢¤½¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ£ò OrbitingBullet ¤òÆþ¤ì¤ÆÅê¼Í¤¹¤ë
¡¡
¡þ¡¡£³¡¥ThrowingBullet ¤òÇ˲õ¤¹¤ëÁ°¤Ë¡¢OrbitingBullet ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ë¤¹¤Ù¤ÆÌ᤹

¡¡¡¡£´¡¥ThrowingBullet ¤òÇ˲õ¤¹¤ë

¡¡¤³¤Î¤è¤¦¤Ê½èÍý¤Îή¤ì¤Ë¤Ê¤ê¤Þ¤¹¡£
¡þ¤Î¤Ä¤¤¤Æ¤¤¤ëÉôʬ¤¬¿·¤·¤¯ºÎÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤Ç¤¹¡£


£²¡¥BulletBase ¥¯¥é¥¹¤ò½¤Àµ¤·¤Æ¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤¹¤ë¤¿¤á¤Îµ¡Ç½¤òÄɲ乤ë


¡¡°ÊÁ°¤Î¼ê½ç¤ÇºîÀ®¤·¤Æ¤¤¤ë BulletBase ¥¯¥é¥¹¤ò½¤Àµ¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤¹¤ë¤¿¤á¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£

¡¡using UnityEngine.Pool ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£



BulletBase.cs

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




¡¡½èÍý¤Î¥Ý¥¤¥ó¥È¤Ï¥×¥í¥Ñ¥Æ¥£¤Î³èÍÑÊýË¡¤Ç¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò»²¾ÈÀè¤È¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢¤³¤Î¥¯¥é¥¹¤«¤é¤¤¤Ä¤Ç¤â¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë
(º£²ó¤Ï¼¡¤Ë½¤Àµ¤¹¤ë GeneratorBase ¥¯¥é¥¹)¤Ø¤Î¥¢¥¯¥»¥¹¤ò¹Ô¤¨¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¡¢¿·¤·¤¯Äɲä·¤¿ ReleaseBullet ¥á¥½¥Ã¥É¤òǤ°Õ¤Î¥¿¥¤¥ß¥ó¥°¤Ç¼Â¹Ô¤Ç¤­¤ë¾õÂÖ¤òºî¤ê¡¢
ÃƦ¤«¤é¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹½èÍý¤ò¼ÂÁõ½ÐÍè¤Þ¤¹¡£


£³¡¥GeneratorBase ¥¯¥é¥¹¤ò½¤Àµ¤·¤Æ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÄɲ乤ë


¡¡°ÊÁ°¤Î¼ê½ç¤ÇºîÀ®¤·¤Æ¤¤¤ë GeneratorBase ¥¯¥é¥¹¤ò½¤Àµ¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£

¡¡using UnityEngine.Pool ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£



GeneratorBase.cs

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



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


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

¡¡¤½¤Î³µÇ°¤ò¥²¡¼¥àÆâ¤Ç¤âÍøÍѤǤ­¤ë¤è¤¦¤Ë 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 ¤À¤¬¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤ëÌõ¤Ç¤Ï¤Ê¤¤
        bulletPool = new ObjectPool<BulletBase>(
            createFunc: () => Create(),
            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 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎºÇÂ祵¥¤¥º¤Ç¤¹¡£¤³¤ÎÃͤ¬¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÊÝ»ý¤Ç¤­¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁí¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬ºÇÂ祵¥¤¥º¤Ë㤹¤ë¤È¡¢¥×¡¼¥ë¤ËÊÖ¤µ¤ì¤¿¤½¤ì°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï̵»ë¤µ¤ì¡¢¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÃͤòŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¥×¡¼¥ë¤Î¥µ¥¤¥º¤¬Èó¾ï¤ËÂ礭¤¯¤Ê¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£


£µ¡¥BulletBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿»Ò¥¯¥é¥¹¤ÎºîÀ®­¡¡¡¡¼ OrbitingBullet_Pool ¥¯¥é¥¹¡¼


¡¡OrbitingBullet ¥¯¥é¥¹¤ò¸µ¤Ë½¤Àµ¤·¡¢BulletBase ¤ò·Ñ¾µ¤·¡¢ObjectPool ¤Îµ¡Ç½¤òÈ÷¤¨¤¿¿·¤·¤¤¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£

¡¡Á°¤Î¥¯¥é¥¹¤Ï»Ä¤·¤Æ¤ª¤¤¤Æ¡¢¤³¤Á¤é¤Î½èÍý¤ÈÈæ³Ó¤·¤Ê¤¬¤é¡¢¤É¤ÎÉôʬ¤¬¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£



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




¡¡SetUp ¥á¥½¥Ã¥É¤È Shoot ¥á¥½¥Ã¥É¤ò override ¤·¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
Shoot ¥á¥½¥Ã¥É¤Ï¡¢¤³¤Î¥¯¥é¥¹¤Ç¤ÏÍøÍѤ·¤Þ¤»¤ó¤¬¡¢BulletBase ¤Ç¤Î Shoot ¥á¥½¥Ã¥É¤¬ abstract ¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢
¼Â¹Ô¤·¤¿¤¤½èÍý¤¬¤Ê¤¤¾ì¹ç¤Ç¤¢¤Ã¤Æ¤âɬ¤ºÄêµÁ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Ãê¾Ý¥á¥½¥Ã¥É¤Ë¤è¤ëÀ©Ìó¤Ç¤¹¡£

¡¡¤³¤ÎÀ©Ìó¤Ë¤è¤ê¡¢BulletBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¥µ¥Ö¥¯¥é¥¹¤Ë¤Ï¡¢É¬¤º Shoot ¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ç¤ÏÍøÍѤ·¤Þ¤»¤ó¤¬¡¢Â¾¤ÎÃÆÍѤΥ¯¥é¥¹¤Ë¤â¼ÂÁõ¤Î¶¯À©¤¬À¸¤¸¤Þ¤¹¤Î¤Ç¡¢ÃƤòȯ¼Í¤¹¤ëµ¡Ç½¤ò½ñ¤¯¤³¤È¤¬Êݾڤµ¤ì¤ë¤È¤¤¤¦°ÕÌ£¹ç¤¤¤¬¤¢¤ê¤Þ¤¹¡£



¡¡¤Ê¤ª¡¢¤â¤·¤âŨ¦¤ËÀû²ó¤¹¤ëÃƤ¬¤¢¤¿¤Ã¤¿¤È¤­¡¢ÃƤòÇ˲õ¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢
Destroy ¤µ¤»¤Æ¤¤¤ëÉôʬ¤ò¡¢ReleaseBullet() ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡
¡¡Å¨¤ËÀÜ¿¨¤·¤Æ¤âÀû²ó¤¹¤ëÃƼ«ÂΤ¬Ç˲õ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¤¢¤ì¤ÐÌäÂꤢ¤ê¤Þ¤»¤ó¡£


£¶¡¥BulletBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿»Ò¥¯¥é¥¹¤ÎºîÀ®­¢¡¡¡¼ ThrowingBullet_Pool¥¯¥é¥¹¡¼


¡¡¤³¤Á¤é¤â°ÊÁ°¤ËÀ©ºî¤·¤¿ ThrowingBullet ¤ò¡¢BulletBase ¤ò·Ñ¾µ¤·¡¢¤«¤Ä¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤·¤¿·Á¤Ë¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤Þ¤¹¡£

¡¡¿·¤·¤¯¥¯¥é¥¹¤òÀ©ºî¤·¤ÆÈæ³Ó¤¹¤ë³Ø½¬ÊýË¡¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£



ThrowingBullet_Pool.cs

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




¡¡OrbitingBullet_Pool ¤ÈƱ¤¸¤è¤¦¤Ë SetUp ¥á¥½¥Ã¥É¤È Shoot ¥á¥½¥Ã¥É¤ò override ¤·¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
SetUp ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤â OrbitingBullet ¤È¤Ï°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤·¡¢Shoot ¥á¥½¥Ã¥É¤Ç¤ÏÅê¼Í¤Î½èÍý¤ò¹Ô¤¤¡¢
¤½¤Î¤Þ¤Þ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹¤¿¤á¤Î¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤â¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£



¡¡BulletBase ¥¯¥é¥¹¤Î ReleaseBullet ¥á¥½¥Ã¥É¤Ï¡¢Ìá¤êÃͤη¿¤Ï void ¤Ç¡¢°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¤¬
¤³¤³¤Ç¤Ï¿·¤·¤¯¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤È¤·¤Æ ReleaseBullet ¥á¥½¥Ã¥É¤òºîÀ®¤¹¤ë¤È¤È¤â¤Ë¡¢°ú¿ô¤âÀߤ±¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î¤è¤¦¤ËƱ¤¸Ì¾Á°¤Î¥á¥½¥Ã¥É¤Ç¤¢¤Ã¤Æ¤â°ú¿ô¤ÎÀßÄ꤬°Û¤Ê¤ë¾ì¹ç¤Ë¤ÏÄêµÁ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤ò¥ª¡¼¥Ð¡¼¥í¡¼¥Éµ¡Ç½¤È¸Æ¤Ó¤Þ¤¹¡£



¡¡°ú¤­Â³¤­¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¼êË¡¤ò³Ø½¬¤·¤Þ¤·¤ç¤¦¡£

¡¡¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿ÃÆÀ¸À®¤ÎºÇŬ²½­¢

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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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