ºÇ½ª¹¹¿·¡§
orika_ex_miyako 2023ǯ09·î24Æü(Æü) 17:11:04ÍúÎò
¼ÂÁõ¤¹¤ë½èÍý¤¬Â¿¤¤¤¿¤á¡¢£²²ó¤Î¼ê½ç¤Ëʬ¤±¤Þ¤¹¡£
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò»È¤¤¡¢Æ±¤¸ÃƤò¥ê¥µ¥¤¥¯¥ë¤·¤Æ·«¤êÊÖ¤·ÍøÍѤ¹¤ëÊýË¡¤ËÃÖ¤´¹¤¨¤Þ¤¹¡£
¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ï¡¢ºÆÍøÍѲÄǽ¤Ê¥ª¥Ö¥¸¥§¥¯¥È¤Î¥»¥Ã¥È¤ò´ÉÍý¤¹¤ë»ÅÁȤߤǤ¹¡£
¥¢¥×¥ê¥±¡¼¥·¥ç¥óÆâ¤ÇÉÑÈˤËÀ¸À®¤ÈÇË´þ¤ò¹Ô¤¦¥ª¥Ö¥¸¥§¥¯¥È¤ò¥×¡¼¥ë(Èóɽ¼¨²½)¤·¤Æ¤ª¤¡¢
À¸À®¤ÈÇË´þ¤ÎÂå¤ï¤ê¤ËºÆÍøÍÑ(ºÆÉ½¼¨)¤¹¤ë¤³¤È¤Ç¥Ñ¥Õ¥©¡¼¥Þ¥ó¥¹¤ò¸þ¾å¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡¤³¤ÎÎã¤Ç¤Ï¡¢¤¹¤Ç¤ËºîÀ®¤·¤Æ¤¤¤ëµ¡Ç½¤ÎÆâ¡¢¸øÅ¾¤¹¤ëÃÆ¤ÎÀ¸À®¤Èºï½ü¤Î½èÍý¤ò¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤¿¤â¤Î¤ò¾Ò²ð¤·¤Þ¤¹¡£
Ʊ»þ¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ä¥¯¥é¥¹¤Î·Ñ¾µ¤òÍøÍѤ·¤Æ¡¢½èÍý¤ÎÃê¾Ý²½¤â¹Ô¤¤¤Þ¤¹¡£
¡¡¤½¤Î¤¿¤á¡¢¥²¡¼¥à²èÌ̾å¤Îɽ¸½¤ÏÊѤï¤ê¤Þ¤»¤ó¤¬¡¢ÆâÉôŪ¤Ê½èÍý¤Ï¤«¤Ê¤êÊѤï¤ê¤Þ¤¹¡£
¡ã¼ÂÁõư²è¡¼¥Ü¥¿¥ó¤ò²¡¤¹¤È¥×¥ì¥¤¥ä¡¼¤Î¿Ê¹ÔÊý¸þ¤ËÃÆ¤ò¤Þ¤È¤á¤ÆÅê¼Í¤¹¤ë¡¼¡ä
ư²è¥Õ¥¡¥¤¥ë¤Ø¤Î¥ê¥ó¥¯
¡¡»öÁ°¤ËÁ°²ó¤Î¼ê½ç¤Î³Ø½¬¤È¼ÂÁõ¤¬É¬Íפˤʤê¤Þ¤¹¡£
¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øÅ¾¤¹¤ëÃÆ¤Îµ¡Ç½¡
¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øÅ¾¤¹¤ëÃÆ¤Îµ¡Ç½¢
¡¡¡¡=>¡¡¡Ú£²£Ä¡ÛÃÆÀ©¸æÍÑ¥¯¥é¥¹¤ÎÀ߷ץǥ¶¥¤¥ó¤ÈÃê¾Ý²½
¡¡¡¡=>¡¡¡Ú£²£Ä¡ÛÃÆÀ¸À®ÍÑ¥¯¥é¥¹¤ÎÀ߷ץǥ¶¥¤¥ó¤ÈÃê¾Ý²½
¡¡¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ÎÂоݤÏÀû²ó¤¹¤ëÃÆ¤òÅê¼Í¤¹¤ëºÝ¤Î½èÍý¤Ë¤Ê¤ê¤Þ¤¹¡£
¡¡¤¤¤Þ¤Þ¤Ç¤ÏÅê¼Í¤µ¤ì¤¿Àû²ó¤¹¤ëÃÆ¤Ï¡¢Åê¼Í¸å¤ËÇ˲õ¤·¤Æ¤¤¤Þ¤·¤¿¤¬¡¢¤³¤ÎÉôʬ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ç´ÉÍý¤·¤Þ¤¹¡£
¤³¤Î¼êË¡¤òÍѤ¤¤¿¾ì¹ç¡¢Àû²ó¤¹¤ëÃÆ¤ÏÇ˲õ¤µ¤ì¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢Èóɽ¼¨¤Î¾õÂ֤ˤʤꡢ¥×¡¼¥ë¤µ¤ì¤Þ¤¹¡£
¡¡Åê¼Í¤¹¤ë½èÍý¤ËÍøÍѤ·¤Æ¤¤¤ë ThrowingBullet ¤Ï¡¢Àû²ó¤¹¤ëÃÆ¤ò´ÉÍý¤¹¤ë¤¿¤á¤ÎÆþ¤ìʪ¤Ç¤¢¤ë¤¿¤á¡¢
¤³¤Á¤é¤Ï¤½¤ÎÅÔÅÙÇ˲õ¤·¤Æ¡¢À¸À®¤¹¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¡þ¡¡£±¡¥OrbitingBullet(Àû²ó¤¹¤ëÃÆ) ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤«¤é¼è¤ê½Ð¤·¤Æ²èÌ̤Ëɽ¼¨¤¹¤ë ¡¡¡¡¡¡¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¤Ê¤¤¾ì¹ç¤Î¤ß¡¢¿·¤·¤¯À¸À®¤¹¤ë ¡¡¡¡£²¡¥ThrowingBullet ¤òÀ¸À®¤·¡¢¤½¤Î»Ò¥ª¥Ö¥¸¥§¥¯¥È¤È¤·¤Æ£ò OrbitingBullet ¤òÆþ¤ì¤ÆÅê¼Í¤¹¤ë ¡¡ ¡þ¡¡£³¡¥ThrowingBullet ¤òÇ˲õ¤¹¤ëÁ°¤Ë¡¢OrbitingBullet ¤ò¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Ë¤¹¤Ù¤ÆÌ᤹ ¡¡¡¡£´¡¥ThrowingBullet ¤òÇ˲õ¤¹¤ë
¡¡¤³¤Î¤è¤¦¤Ê½èÍý¤Îή¤ì¤Ë¤Ê¤ê¤Þ¤¹¡£
¡þ¤Î¤Ä¤¤¤Æ¤¤¤ëÉôʬ¤¬¿·¤·¤¯ºÎÍѤ¹¤ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤Ç¤¹¡£
¡¡°ÊÁ°¤Î¼ê½ç¤ÇºîÀ®¤·¤Æ¤¤¤ë BulletBase ¥¯¥é¥¹¤ò½¤Àµ¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤¹¤ë¤¿¤á¤Îµ¡Ç½¤òÄɲä·¤Þ¤¹¡£
¡¡using UnityEngine.Pool ¤ÎÀë¸À¤¬É¬Íפˤʤê¤Þ¤¹¡£
BulletBase.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 ¤À¤¬¡¢¥¤¥ó¥¹¥¿¥ó¥¹¤òºî¤ëÌõ¤Ç¤Ï¤Ê¤¤ 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°ú¿ô¤Þ¤Ç¤Ï¡¢ÆÃÄê¤Î¥¤¥Ù¥ó¥ÈȯÀ¸»þ¤Î¼Â¹Ô½èÍý¤òÀßÄꤷ¤Þ¤¹¡£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°ú¿ô¤Ï collectionCheck ¤Ç¤¹¡£bool ·¿¤Ç¤¹¡£¥Á¥§¥Ã¥¯µ¡Ç½¤Î¥ª¥ó¥ª¥ÕÀÚ¤êÂØ¤¨¤Ç¤¹¡£¤³¤³¤Ç¤Ï true ¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£
true ¤ËÀßÄꤷ¤Æ¤ª¤¯¤³¤È¤Ç¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¥×¡¼¥ë¤ËÌᤵ¤ì¤ë¤È¤¤Ë¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¥×¡¼¥ë¤ËÌ᤹ºÝ¡¢Æ±°ì¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¤«Ä´¤Ù¡¢¤¹¤Ç¤ËÅÐÏ¿¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Îã³°¤¬¥¹¥í¡¼¤µ¤ì¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤Ï¥¨¥Ç¥£¥¿¡¼¤Ç¤Î¤ß¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡Âè6°ú¿ô¤Ï defaultCapacity ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 10 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
ºÇ½é¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ëÌ¿Î᤬¤¤¿¤È¤¡¢
¤³¤ÎÃͤÎʬ¤À¤±¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤Ë¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤·¤Þ¤¹¡£
¡¡º£²ó¤Î»ØÄêÃͤξì¹ç¡¢ºÇ½é¤ÎÀ¸À®Ì¿Îá¤Ë¤è¤ê10¸Ä¤Î¥ª¥Ö¥¸¥§¥¯¥È¤òÀ¸À®¤¹¤ë¤³¤È¤Ë¤Ê¤ê¡¢ºÆÍøÍѤµ¤ì¤ë¤³¤È¤¬Êݾڤµ¤ì¤Þ¤¹¡£
¥²¡¼¥à³«»Ï»þ¤Ê¤É¡¢Í½¤á¥ª¥Ö¥¸¥§¥¯¥È¤òÍѰդ·¤Æ¤ª¤¤¿¤¤¾ì¹ç¤Ê¤É¤ËÌòΩ¤Á¤Þ¤¹¡£
¡¡Âè7°ú¿ô¤Ï maxSize ¤Ç¤¹¡£int ·¿¤Ç¤¹¡£¤³¤³¤Ç¤Ï 1000 ¤Ë»ØÄꤷ¤Æ¤¤¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ÎºÇÂ祵¥¤¥º¤Ç¤¹¡£¤³¤ÎÃͤ¬¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÆâ¤ËÊÝ»ý¤Ç¤¤ë¥ª¥Ö¥¸¥§¥¯¥È¤ÎÁí¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤¬ºÇÂ祵¥¤¥º¤Ë㤹¤ë¤È¡¢¥×¡¼¥ë¤ËÊÖ¤µ¤ì¤¿¤½¤ì°Ê¾å¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤Ï̵»ë¤µ¤ì¡¢¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¤µ¤ì¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡£
¤½¤Î¤¿¤á¡¢¤³¤ÎÃͤòŬÀڤ˻ÈÍѤ¹¤ë¤È¡¢¥×¡¼¥ë¤Î¥µ¥¤¥º¤¬Èó¾ï¤ËÂ礤¯¤Ê¤ë¤Î¤òËɤ°¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
¡¡OrbitingBullet ¥¯¥é¥¹¤ò¸µ¤Ë½¤Àµ¤·¡¢BulletBase ¤ò·Ñ¾µ¤·¡¢ObjectPool ¤Îµ¡Ç½¤òÈ÷¤¨¤¿¿·¤·¤¤¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
¡¡Á°¤Î¥¯¥é¥¹¤Ï»Ä¤·¤Æ¤ª¤¤¤Æ¡¢¤³¤Á¤é¤Î½èÍý¤ÈÈæ³Ó¤·¤Ê¤¬¤é¡¢¤É¤ÎÉôʬ¤¬¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤µ¤ì¤Æ¤¤¤ë¤«¤ò³Îǧ¤·¤Æ¤ß¤Þ¤·¤ç¤¦¡£
¡¡SetUp ¥á¥½¥Ã¥É¤È Shoot ¥á¥½¥Ã¥É¤ò override ¤·¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
Shoot ¥á¥½¥Ã¥É¤Ï¡¢¤³¤Î¥¯¥é¥¹¤Ç¤ÏÍøÍѤ·¤Þ¤»¤ó¤¬¡¢BulletBase ¤Ç¤Î Shoot ¥á¥½¥Ã¥É¤¬ abstract ¤Ë¤è¤Ã¤ÆÄêµÁ¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢
¼Â¹Ô¤·¤¿¤¤½èÍý¤¬¤Ê¤¤¾ì¹ç¤Ç¤¢¤Ã¤Æ¤âɬ¤ºÄêµÁ¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£Ãê¾Ý¥á¥½¥Ã¥É¤Ë¤è¤ëÀ©Ìó¤Ç¤¹¡£
¡¡¤³¤ÎÀ©Ìó¤Ë¤è¤ê¡¢BulletBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¥µ¥Ö¥¯¥é¥¹¤Ë¤Ï¡¢É¬¤º Shoot ¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ç¤ÏÍøÍѤ·¤Þ¤»¤ó¤¬¡¢Â¾¤ÎÃÆÍѤΥ¯¥é¥¹¤Ë¤â¼ÂÁõ¤Î¶¯À©¤¬À¸¤¸¤Þ¤¹¤Î¤Ç¡¢ÃƤòȯ¼Í¤¹¤ëµ¡Ç½¤ò½ñ¤¯¤³¤È¤¬Êݾڤµ¤ì¤ë¤È¤¤¤¦°ÕÌ£¹ç¤¤¤¬¤¢¤ê¤Þ¤¹¡£
¡¡¤Ê¤ª¡¢¤â¤·¤âŨ¦¤ËÀû²ó¤¹¤ëÃÆ¤¬¤¢¤¿¤Ã¤¿¤È¤¡¢ÃƤòÇ˲õ¤·¤Æ¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢
Destroy ¤µ¤»¤Æ¤¤¤ëÉôʬ¤ò¡¢ReleaseBullet() ¥á¥½¥Ã¥É¤ò¼Â¹Ô¤¹¤ë¤è¤¦¤ËÊѹ¹¤·¤Æ¤¯¤À¤µ¤¤¡£
¡¡
¡¡Å¨¤ËÀÜ¿¨¤·¤Æ¤âÀû²ó¤¹¤ëÃÆ¼«ÂΤ¬Ç˲õ¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤Ç¤¢¤ì¤ÐÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¡¡¤³¤Á¤é¤â°ÊÁ°¤ËÀ©ºî¤·¤¿ ThrowingBullet ¤ò¡¢BulletBase ¤ò·Ñ¾µ¤·¡¢¤«¤Ä¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤·¤¿·Á¤Ë¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤·¤Þ¤¹¡£
¡¡¿·¤·¤¯¥¯¥é¥¹¤òÀ©ºî¤·¤ÆÈæ³Ó¤¹¤ë³Ø½¬ÊýË¡¤¬¤è¤¤¤Ç¤·¤ç¤¦¡£
ThrowingBullet_Pool.cs
¡¡OrbitingBullet_Pool ¤ÈƱ¤¸¤è¤¦¤Ë SetUp ¥á¥½¥Ã¥É¤È Shoot ¥á¥½¥Ã¥É¤ò override ¤·¤Æ¼ÂÁõ¤·¤Æ¤¤¤Þ¤¹¡£
SetUp ¥á¥½¥Ã¥ÉÆâ¤Î½èÍý¤â OrbitingBullet ¤È¤Ï°Û¤Ê¤Ã¤Æ¤¤¤Þ¤¹¤·¡¢Shoot ¥á¥½¥Ã¥É¤Ç¤ÏÅê¼Í¤Î½èÍý¤ò¹Ô¤¤¡¢
¤½¤Î¤Þ¤Þ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹¤¿¤á¤Î¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·¤â¹Ô¤Ã¤Æ¤¤¤Þ¤¹¡£
¡¡BulletBase ¥¯¥é¥¹¤Î ReleaseBullet ¥á¥½¥Ã¥É¤Ï¡¢Ìá¤êÃͤη¿¤Ï void ¤Ç¡¢°ú¿ô¤Ï¤¢¤ê¤Þ¤»¤ó¤Ç¤·¤¿¤¬
¤³¤³¤Ç¤Ï¿·¤·¤¯¥³¥ë¡¼¥Á¥ó¥á¥½¥Ã¥É¤È¤·¤Æ ReleaseBullet ¥á¥½¥Ã¥É¤òºîÀ®¤¹¤ë¤È¤È¤â¤Ë¡¢°ú¿ô¤âÀߤ±¤Æ¤¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤ËƱ¤¸Ì¾Á°¤Î¥á¥½¥Ã¥É¤Ç¤¢¤Ã¤Æ¤â°ú¿ô¤ÎÀßÄ꤬°Û¤Ê¤ë¾ì¹ç¤Ë¤ÏÄêµÁ¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£
¤³¤Îµ¡Ç½¤ò¥ª¡¼¥Ð¡¼¥í¡¼¥Éµ¡Ç½¤È¸Æ¤Ó¤Þ¤¹¡£
¡¡°ú¤Â³¤¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¼êË¡¤ò³Ø½¬¤·¤Þ¤·¤ç¤¦¡£
¡¡¡¡¡¡=>¡¡¡Ú£²£Ä¡Û¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ò³èÍѤ·¤¿ÃÆÀ¸À®¤ÎºÇŬ²½¢
- ¥«¥Æ¥´¥ê¡§
- ¿Ê³Ø/¥¹¥¯¡¼¥ë
- ¥×¥í¥°¥é¥ß¥ó¥°
¥³¥á¥ó¥È¤ò¤«¤¯