ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2024ǯ02·î13Æü(²Ð) 12:32:57ÍúÎò
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò»È¤¤¡¢Æ±¤¸Å¨¤ò¥ê¥µ¥¤¥¯¥ë¤·¤Æ·«¤êÊÖ¤·ÍøÍѤ¹¤ëÊýË¡¤ËÃÖ¤´¹¤¨¤Þ¤¹¡£
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ï¡¢ºÆÍøÍѲÄǽ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥»¥Ã¥È¤ò´ÉÍý¤¹¤ë»ÅÁȤߤǤ¹¡£
¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆâ¤ÇÉÑÈˤËÀ¸À®¤ÈÇË´þ¤ò¹Ô¤¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¡¼¥ë(Èóɽ¼¨²½)¤·¤Æ¤ª¤¡¢
À¸À®¤ÈÇË´þ¤ÎÂå¤ï¤ê¤ËºÆÍøÍÑ(ºÆɽ¼¨)¤¹¤ë¤³¤È¤Ç¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ò¸þ¾å¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡ã¼ÂÁõÆ°²è¡¡¥Ò¥¨¥é¥ë¥¡¼¤ËÅݤ·¤¿Å¨¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Èóɽ¼¨¾õÂ֤ǻĤäƤª¤ê¡¢ºÆɽ¼¨¤µ¤ì¤Æ»È¤ï¤ì¤Æ¤¤¤ë¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÎÂоݤÏŨ¤òÀ¸À®¤¹¤ëºÝ¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤¤¤Þ¤Þ¤ÇŨ¤òÇ˲õ¤·¤ÆºÆÅÙÀ¸À®¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ÎÉôʬ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ç´ÉÍý¤·¤Þ¤¹¡£
¤³¤Î¼êË¡¤òÍѤ¤¤¿¾ì¹ç¡¢Å¨¤ÏÇ˲õ¤µ¤ì¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢Èóɽ¼¨¤Î¾õÂ֤ˤʤꡢ¥×¡¼¥ë¤µ¤ì¤Þ¤¹¡£
¡þ¡¡£±¡¥Å¨¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¼è¤ê½Ð¤·¤Æ²èÌ̤Ëɽ¼¨¤¹¤ë ¡¡¡¡¡¡¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¤Ê¤¤¾ì¹ç¤Î¤ß¡¢¿·¤·¤¯À¸À®¤¹¤ë ¡þ¡¡£²¡¥Å¨¤òÇ˲õ¤¹¤ë¾ì¹ç¡¢Âå¤ï¤ê¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ë¤¹¤Ù¤ÆÌ᤹
¡¡¤³¤Î¤è¤¦¤Ê½èÍý¤Îή¤ì¤Ë¤Ê¤ê¤Þ¤¹¡£
¡þ¤Î¤Ä¤¤¤Æ¤¤¤ëÉôʬ¤¬¿·¤·¤¯ºÎÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤Ç¤¹¡£
¡¡EnemyController ¥¯¥é¥¹¤òºîÀ®¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤¹¤ë¤¿¤á¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£
¡¡using UnityEngine.Pool ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£
EnemyController.cs
¡¡½èÍý¤Î¥Ý¥¤¥ó¥È¤Ï¥×¥í¥Ñ¥Æ¥£¤Î³èÍÑÊýË¡¤Ç¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò»²¾ÈÀè¤È¤·¤Æ¤ª¤¯¤³¤È¤Ë¤è¤ê¡¢¤³¤Î¥¯¥é¥¹¤«¤é¤¤¤Ä¤Ç¤â¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë
(º£²ó¤Ï¼¡¤Ë½¤Àµ¤¹¤ë GeneratorBase ¥¯¥é¥¹)¤Ø¤Î¥¢¥¯¥»¥¹¤ò¹Ô¤¨¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢¿·¤·¤¯Äɲä·¤¿ ReleaseBullet ¥á¥½¥Ã¥É¤òǤ°Õ¤Î¥¿¥¤¥ß¥ó¥°¤Ç¼Â¹Ô¤Ç¤¤ë¾õÂÖ¤òºî¤ê¡¢
Ũ¦¤«¤é¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹½èÍý¤ò¼ÂÁõ½ÐÍè¤Þ¤¹¡£
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤È¤Ï¡¢¥Ç¥¶¥¤¥ó¥Ñ¥¿¡¼¥ó¤Î£±¤Ä¤Ç¤¹¡£
¡¡¤½¤Î³µÇ°¤ò¥²¡¼¥àÆâ¤Ç¤âÍøÍѤǤ¤ë¤è¤¦¤Ë 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°ú¿ô¤Þ¤Ç¤Ï¡¢ÆÃÄê¤Î¥¤¥Ù¥ó¥ÈȯÀ¸»þ¤Î¼Â¹Ô½èÍý¤òÀßÄꤷ¤Þ¤¹¡£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°ú¿ô¤Ï collectionCheck ¤Ç¤¹¡£bool ·¿¤Ç¤¹¡£¥Á¥§¥Ã¥¯µ¡Ç½¤Î¥ª¥ó¥ª¥ÕÀÚ¤êÂؤ¨¤Ç¤¹¡£¤³¤³¤Ç¤Ï true ¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
true ¤ËÀßÄꤷ¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¥×¡¼¥ë¤ËÌᤵ¤ì¤ë¤È¤¤Ë¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¥×¡¼¥ë¤ËÌ᤹ºÝ¡¢Æ±°ì¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«Ä´¤Ù¡¢¤¹¤Ç¤ËÅÐÏ¿¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Îã³°¤¬¥¹¥í¡¼¤µ¤ì¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤Ï¥¨¥Ç¥£¥¿¡¼¤Ç¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡Âè6°ú¿ô¤Ï defaultCapacity ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 10 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥×¡¼¥ë¤ÇÍøÍѤ¹¤ë¥³¥ì¥¯¥·¥ç¥ó¤Î½é´üµöÍÆÎ̤ò¼¨¤·¤Æ¤¤¤Þ¤¹¡£
¡¡Âè7°ú¿ô¤Ï maxSize ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 1000 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎºÇÂ祵¥¤¥º¤Ç¤¹¡£¤³¤ÎÃͤ¬¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÊÝ»ý¤Ç¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁí¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬ºÇÂ祵¥¤¥º¤Ë㤹¤ë¤È¡¢¥×¡¼¥ë¤ËÊÖ¤µ¤ì¤¿¤½¤ì°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï̵»ë¤µ¤ì¡¢¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¤µ¤ì¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÃͤòŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¥×¡¼¥ë¤Î¥µ¥¤¥º¤¬Èó¾ï¤ËÂ礤¯¤Ê¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
£¶¡¥EnemyGenerator ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤ÆÀßÄê¤ò¹Ô¤¦ 
¡¡¥Ò¥¨¥é¥ë¥¡¼¤Ë¤Æ Create Empty ¤ò¹Ô¤¤¡¢¿·¤·¤¤¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òºîÀ®¤·¡¢EnemyGenerator ¤Ë̾Á°¤òÊѹ¹¤·¤Þ¤¹¡£
¤³¤Á¤é¤Ë EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¡¡¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¡¢¿·¤·¤¯Äɲä·¤¿ÊÑ¿ô¤ÎÀßÄê¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡¤¹¤Ç¤Ë EnemyGenerator ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Â¸ºß¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢¤½¤ì¤òÊ£À½¤·¤ÆÈóɽ¼¨¤Ë¤·¤Æ¤ª¤¤Þ¤¹¡£
¿·¤·¤¯ºîÀ®¤·¤¿ EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤òÊ£À½¤·¤¿ EnemyGenerator ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¡¢
¸µ¡¹¤¢¤ë EnemyGenerator ¥¹¥¯¥ê¥×¥È¤Î¾ðÊó¤ò°Ü¤·¤Æ¤«¤é EnemyGenerator ¥¹¥¯¥ê¥×¥È¤ò Remove ¤·¤Þ¤·¤ç¤¦¡£
¡¡¤½¤¦¤¹¤ë¤³¤È¤Ç¡¢¸µ¡¹¤Î EnemyGenerator ¤ÎÀßÄê¤ò»È¤Ã¤Æ EnemyGeneratorObjectPool ¥¹¥¯¥ê¥×¥È¤ò±¿ÍѽÐÍè¤Þ¤¹¡£
¡¡enemyPrefab ÊÑ¿ô¤Ë¤Ï¡¢À¸À®¤·¤¿¤¤Å¨¤Î¥×¥ì¥Ï¥Ö¤ò¥¢¥µ¥¤¥ó¤·¤Þ¤¹¡£
EnemyController ¥¹¥¯¥ê¥×¥È¤¬¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¥×¥ì¥Ï¥Ö¤Ç¤¢¤ì¤Ð¡¢¤É¤ì¤Ç¤â¥¢¥µ¥¤¥ó½ÐÍè¤Þ¤¹¡£
¡¡generateInterval ÊÑ¿ô¤ÏÀ¸À®¤¹¤ë¤Þ¤Ç¤ÎÂÔµ¡»þ´Ö¡¢maxGenerateCount ÊÑ¿ô¤ÏÀ¸À®¤¹¤ëŨ¤ÎÁí¿ô¤Ç¤¹¡£
¡¡²¼µ¤Ï»²¹ÍÃͤǤ¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü

¡¡¥²¡¼¥à¤ò¼Â¹Ô¤·¤ÆÆ°ºî¤ò³Îǧ¤·¤Þ¤·¤ç¤¦¡£
¡¡ÇùÁ³¤ÈÆ°¤«¤¹¤Î¤Ç¤Ï¤Ê¤¯¡¢¼«Ê¬¤¬ºîÀ®¤·¤¿¥¹¥¯¥ê¥×¥È¤ÎÆâÍƤò³Îǧ¤·¡¢½èÍý¤¬Àµ¾ï¤ËÆ°ºî¤·¤Æ¤¤¤ë¤«¤ò¸«¶Ë¤á¤ëÎϤòÀ§ÈóÍܤäƤ¤¤Ã¤Æ¤¯¤À¤µ¤¤¡£
¡¡¥Ò¥¨¥é¥ë¥¡¼¤ä¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ÎÃͤò³Îǧ¤·¤Ê¤¬¤é¥Ç¥Ð¥Ã¥°¤·¤Æ¤¤¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡£
¡ã¼ÂÁõÆ°²è¡¡¥Ò¥¨¥é¥ë¥¡¼¤ËÅݤ·¤¿Å¨¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤¬Èóɽ¼¨¾õÂ֤ǻĤäƤª¤ê¡¢ºÆɽ¼¨¤µ¤ì¤Æ»È¤ï¤ì¤Æ¤¤¤ë¡ä
Æ°²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡¾å¼ê¤¯Æ°¤«¤Ê¤¤¾ì¹ç¤Ë¤Ï¡¢Unity Æâ¤ÎÀßÄê¤ä¡¢¥¹¥¯¥ê¥×¥È¤ÎÆâÍƤò¸«Ä¾¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£
¡¡
¡¡°Ê¾å¤Ç´°À®¤Ç¤¹¡£
¡¡Àµ¾ï¤ËÆ°ºî¤·¤¿¤é¡¢EnemyGenerator ¤òÁý¤ä¤·¤¿¤ê¡¢°Û¤Ê¤ëŨ¤òÀ¸À®¤·¤¿¤ê¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£



- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯