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

¡¡£²£Ä¥²¡¼¥à¤Ë¤ª¤¤¤Æ¡¢Å¨¤ÎÀ¸À®µ¡Ç½¤Ë´Ø¤·¤Æ¤ÎȯŸÎã¤Ç¤¹¡£



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

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


¡ã¼ÂÁõÆ°²è¡¡¥Ò¥¨¥é¥ë¥­¡¼¤ËÅݤ·¤¿Å¨¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Èóɽ¼¨¾õÂ֤ǻĤäƤª¤ê¡¢ºÆɽ¼¨¤µ¤ì¤Æ»È¤ï¤ì¤Æ¤¤¤ë¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯



£±¡¥Àß·×


¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÎÂоݤÏŨ¤òÀ¸À®¤¹¤ëºÝ¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£

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


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

¡þ¡¡£²¡¥Å¨¤òÇ˲õ¤¹¤ë¾ì¹ç¡¢Âå¤ï¤ê¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ë¤¹¤Ù¤ÆÌ᤹

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


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


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

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



EnemyController.cs

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




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

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


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


¡¡EnemyGeneratorObjectPool¥¯¥é¥¹¤òºîÀ®¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£

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



EnemyGeneratorObjectPool.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 ¤À¤¬¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤ëÌõ¤Ç¤Ï¤Ê¤¤
        enemyPool = new ObjectPool<EnemyController>(
            createFunc: () => Create(),
            actionOnGet: OnGetFromPool,  // ¥á¥½¥Ã¥ÉºîÀ®¤·¤ÆÅÐÏ¿¤Ç¤­¤ë
            actionOnRelease: target => target.gameObject.SetActive(false),
            actionOnDestroy: target => Destroy(target.gameObject),
            collectionCheck: true,
            defaultCapacity: 10,
            maxSize: 1000);

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

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

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


»²¹Í¥µ¥¤¥È
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°ú¿ô¤Ë¼è¤ê¤Þ¤¹¡£º£²ó¤Ç¤¢¤ì¤Ð EnemyController ·¿¤Î¾ðÊó¤ò»ØÄꤷ¤Þ¤¹¡£

¡¡¤³¤³¤Ë¤Ï¥ª¥Ö¥¸¥§¥¯¥È¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÌ᤹̿Î᤬Í褿¤È¤­¤Î½èÍý¤òÀßÄꤷ¤Þ¤¹¡£
target => target.gameObject.SetActive(false) ¤ÈÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¡¢°ú¿ô¤Ç¼õ¤±¤¿ target (º£²ó¤Ï EnemyController ·¿)¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò 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 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎºÇÂ祵¥¤¥º¤Ç¤¹¡£¤³¤ÎÃͤ¬¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÊÝ»ý¤Ç¤­¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁí¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬ºÇÂ祵¥¤¥º¤Ë㤹¤ë¤È¡¢¥×¡¼¥ë¤ËÊÖ¤µ¤ì¤¿¤½¤ì°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï̵»ë¤µ¤ì¡¢¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¤µ¤ì¤ë²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÃͤòŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¥×¡¼¥ë¤Î¥µ¥¤¥º¤¬Èó¾ï¤ËÂ礭¤¯¤Ê¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£



£µ¡¥¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÀìÍѤΥץì¥Ï¥Ö¤òºîÀ®¤¹¤ë


¡¡¤¹¤Ç¤ËŨÍѤΥץì¥Ï¥Ö¤¬¤¢¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤Á¤é¤òÍøÍѤ·¤Þ¤·¤ç¤¦¡£

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ç¤Ï EnemyController ·¿¤Î¾ðÊó¤ÇŨ¤ò´ÉÍý¤·¤Þ¤¹¤Î¤Ç¡¢
EnemyController ¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢¸½ºß¤¢¤ë¥×¥ì¥Ï¥Ö¤â¤½¤Î¤Þ¤ÞήÍѤǤ­¤Þ¤¹¡£


¡ãPrefabs ¥Õ¥©¥ë¥À¡ä






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


¡¡¥Ò¥¨¥é¥ë¥­¡¼¤Ë¤Æ Create Empty ¤ò¹Ô¤¤¡¢¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢EnemyGenerator ¤Ë̾Á°¤òÊѹ¹¤·¤Þ¤¹¡£
¤³¤Á¤é¤Ë EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£

¡¡¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¡¢¿·¤·¤¯Äɲä·¤¿ÊÑ¿ô¤ÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£

¡¡¤¹¤Ç¤Ë EnemyGenerator ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Â¸ºß¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤òÊ£À½¤·¤ÆÈóɽ¼¨¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£
¿·¤·¤¯ºîÀ®¤·¤¿ EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤òÊ£À½¤·¤¿ EnemyGenerator ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¡¢
¸µ¡¹¤¢¤ë EnemyGenerator ¥¹¥¯¥ê¥×¥È¤Î¾ðÊó¤ò°Ü¤·¤Æ¤«¤é EnemyGenerator ¥¹¥¯¥ê¥×¥È¤ò Remove ¤·¤Þ¤·¤ç¤¦¡£

¡¡¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¸µ¡¹¤Î EnemyGenerator ¤ÎÀßÄê¤ò»È¤Ã¤Æ EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤ò±¿ÍѽÐÍè¤Þ¤¹¡£



¡¡enemyPrefab ÊÑ¿ô¤Ë¤Ï¡¢À¸À®¤·¤¿¤¤Å¨¤Î¥×¥ì¥Ï¥Ö¤ò¥¢¥µ¥¤¥ó¤·¤Þ¤¹¡£
EnemyController ¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥×¥ì¥Ï¥Ö¤Ç¤¢¤ì¤Ð¡¢¤É¤ì¤Ç¤â¥¢¥µ¥¤¥ó½ÐÍè¤Þ¤¹¡£

¡¡generateInterval ÊÑ¿ô¤ÏÀ¸À®¤¹¤ë¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö¡¢maxGenerateCount ÊÑ¿ô¤ÏÀ¸À®¤¹¤ëŨ¤ÎÁí¿ô¤Ç¤¹¡£

¡¡²¼µ­¤Ï»²¹ÍÃͤǤ¹¡£


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



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


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

¡¡ÇùÁ³¤ÈÆ°¤«¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢¼«Ê¬¤¬ºîÀ®¤·¤¿¥¹¥¯¥ê¥×¥È¤ÎÆâÍƤò³Îǧ¤·¡¢½èÍý¤¬Àµ¾ï¤ËÆ°ºî¤·¤Æ¤¤¤ë¤«¤ò¸«¶Ë¤á¤ëÎϤòÀ§ÈóÍܤäƤ¤¤Ã¤Æ¤¯¤À¤µ¤¤¡£

¡¡¥Ò¥¨¥é¥ë¥­¡¼¤ä¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ÎÃͤò³Îǧ¤·¤Ê¤¬¤é¥Ç¥Ð¥Ã¥°¤·¤Æ¤¤¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£


¡ã¼ÂÁõÆ°²è¡¡¥Ò¥¨¥é¥ë¥­¡¼¤ËÅݤ·¤¿Å¨¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Èóɽ¼¨¾õÂ֤ǻĤäƤª¤ê¡¢ºÆɽ¼¨¤µ¤ì¤Æ»È¤ï¤ì¤Æ¤¤¤ë¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯


¡¡¾å¼ê¤¯Æ°¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢Unity Æâ¤ÎÀßÄê¤ä¡¢¥¹¥¯¥ê¥×¥È¤ÎÆâÍƤò¸«Ä¾¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡¡


¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£

¡¡Àµ¾ï¤ËÆ°ºî¤·¤¿¤é¡¢EnemyGenerator ¤òÁý¤ä¤·¤¿¤ê¡¢°Û¤Ê¤ëŨ¤òÀ¸À®¤·¤¿¤ê¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£








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


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

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

Menu



´ðÁÃ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

private



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

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