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

Äɲ䵤줿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£
ºï½ü¤µ¤ì¤¿¹Ô¤Ï¤³¤Î¿§¤Ç¤¹¡£

¡¡¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î¥Ù¡¼¥¹¤È¤Ê¤ëµ¡Ç½¤òºîÀ®¤·¤Æ¤ª¤­¡¢¤½¤ì¤ò·Ñ¾µ¤¹¤ë¤³¤È¤ÇÍÍ¡¹¤ÊÍÑÅӤ˱þÍѤǤ­¤ë¼ÂÁõÎã¤Ç¤¹¡£

¡¡Å¨¤ÎÀ¸À®¡¢¥¢¥¤¥Æ¥à¤ÎÀ¸À®¡¢¥Ü¥¿¥ó¤ÎÀ¸À®¡¢¥Õ¥í¡¼¥Èɽ¼¨¤ÎÀ¸À®¤Ê¤É¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Î³èÍѤǤ­¤ëÈϰϤϹ­¤¤¤¿¤á¡¢
¤½¤ì¤é¤ËÂФ·¤ÆÈÆÍÑŪ¤Ë¼ÂÁõ¤ò¹Ô¤¦¤¿¤á¤ÎÀ߷פˤʤäƤ¤¤Þ¤¹¡£

----

*£±¡¥ÀâÌÀ

¡¡µ­»ö¤Ç¤Ï¡¢°Ê²¼¤ÎÆâÍƤ˾ÇÅÀ¤òÅö¤Æ¤Æ²òÀ⤷¤Þ¤¹¡£

**ÃÆÀ¸À®¥¯¥é¥¹¤Î´ðËÜÀß·×

¡¡ÃƤÎÀ¸À®¤ÈÃƤËÂФ·¤Æ¤Î»öÁ°¤ÎÀßÄê¤Ê¤É¡¢ÃƤδðËÜŪ¤ÊÀ¸À®µ¡Ç½¤ò¤É¤Î¤è¤¦¤ËÀ߷פ¹¤ë¤«¤Ë¤Ä¤¤¤ÆÀâÌÀ¤·¤Þ¤¹¡£
¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Î¸¶Â§¤òŬÍѤ·¤Æ¡¢¶¦Ä̤ﶤëÉñ¤¤¤òÃê¾Ý¥¯¥é¥¹¤ä¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤È¤·¤Æ¼ÂÁõ¤·¡¢ºÆÍøÍÑÀ­¤ò¹â¤á¤ë¥¢¥×¥í¡¼¥Á¤òõ¤ê¤Þ¤¹¡£

----

*£²¡¥IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎºîÀ®

¡¡IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥·¥å¡¼¥Æ¥£¥ó¥°¥²¡¼¥à¤ä¥¢¥¯¥·¥ç¥ó¥²¡¼¥à¤Ê¤É¤ÇÉÑÈˤ˻ÈÍѤµ¤ì¤ëÃƤÎÀ¸À®¤òÃê¾Ý²½¤¹¤ë¤¿¤á¤ËÀ߷פµ¤ì¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢ÃƤòÀ¸À®¤¹¤ë¤¿¤á¤Î´ðËÜŪ¤ÊÁàºî¤òÄêµÁ¤·¤Æ¤ª¤ê¡¢''¶ñÂÎŪ¤ÊÃƤμïÎà¤äµóÆ°¤Ë°Í¸¤»¤º''¤Ë''¶¦Ä̤Υ¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤òÄó¶¡''¤·¤Þ¤¹¡£

----

''IGeneratable.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£
=|BOX|
using UnityEngine;

/// <summary>
/// ¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥·¥å¡¼¥Æ¥£¥ó¥°¥²¡¼¥à¤ä¥¢¥¯¥·¥ç¥ó¥²¡¼¥à¤Ê¤É¤Ç»ÈÍѤµ¤ì¤ëÃƤÎÀ¸À®¤òÃê¾Ý²½¤·¤Þ¤¹¡£
/// `IGeneratable`¤ò¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤Ï¡¢¶¦Ä̤ÎÃƤÎÀ¸À®Áàºî¤òÄ󶡤·¡¢¥²¡¼¥àÆâ¤Î¤µ¤Þ¤¶¤Þ¤ÊÍ×ÁǤ¬°ì´Ó¤·¤¿ÊýË¡¤ÇÃƤòÀ¸À®¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£
/// </summary>
public interface IGeneratable
{
/// <summary>
/// ¤³¤Î¥á¥½¥Ã¥É¤Ï¡¢`IGeneratable`¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÇÄêµÁ¤µ¤ì¤ëÃƤÎȯ¼ÍÁàºî¤òɽ¤·¤Þ¤¹¡£
/// ¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤Ï¡¢¤³¤Î¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤·¤Æ¡¢»ØÄꤵ¤ì¤¿È¯¼ÍÊý¸þ¤È»ý³»þ´Ö¤Ë´ð¤Å¤¤¤ÆÃƤòȯ¼Í¤¹¤ë¶ñÂÎŪ¤ÊÆ°ºî¤òÄ󶡤·¤Þ¤¹¡£
/// </summary>
/// <param name="direction"></param>
/// <param name="duration"></param>
void GenerateBullet(Vector2 direction);

/// <summary>
/// ¾åµ­¤Î¥á¥½¥Ã¥É¤Î¥ª¡¼¥Ð¡¼¥í¡¼¥É¡£Âè2°ú¿ô¤ÇǤ°Õ¤Î·¿¤Î¾ðÊó¤ò¼õ¤±¼è¤ì¤ë¤è¤¦¤Ë¤·¤ÆÈÆÍÑÀ­¤ò¹â¤á¤Æ¤¤¤Þ¤¹¡£
/// </summary>
/// <param name="direction"></param>
/// <param name="t"></param>
/// <typeparam name="T"></typeparam>
void GenerateBullet<T>(Vector2 direction, T t);
}
||=
[END]

¡¡ÄêµÁ¤·¤Æ¤¤¤ë¥á¥½¥Ã¥É¤Ï GenerateBullet ¥á¥½¥Ã¥É¤Î¤ß¤Ç¤¹¡£
Ʊ̾¤Î¥á¥½¥Ã¥É¤ò£²¤Ä¡¢°ú¿ô¤Î¾ðÊó¤ò°Û¤Ê¤ë¾õÂ֤ˤ·¤ÆÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥á¥½¥Ã¥É¤ÏÆÃÀ­¾å¡¢''¼«Æ°Åª¤Ë public °·¤¤''¤Ë¤Ê¤ê¤Þ¤¹¡£

----

¡¡¶ñÂÎŪ¤Ë¤Ï¡¢IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï°Ê²¼¤ÎÌò³ä¤ò²Ì¤¿¤·¤Þ¤¹¡§

----

**£±¡¥ÃƤÎÀ¸À®µ¡Ç½¤ÎÄêµÁ
¡¡
¡¡IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢GenerateBullet¥á¥½¥Ã¥É¤òÄêµÁ¤·¤Æ¤¤¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ÏÃƤòÀ¸À®¤¹¤ë¤¿¤á¤Î´ðËÜŪ¤Ê¼ê³¤­¤òɽ¤·¤Æ¤ª¤ê¡¢À¸À®¤ËɬÍפÊȯ¼ÍÊý¸þ¤ò¥Ñ¥é¥á¡¼¥¿¤È¤·¤Æ¼õ¤±¼è¤ê¤Þ¤¹¡£

¡¡¤Þ¤¿°ú¿ô¤Î¥ª¡¼¥Ð¡¼¥í¡¼¥É¤Ë¤è¤ê¡¢Æ±Ì¾¤Î¥á¥½¥Ã¥É¤Ë¤ÏÄɲäΰú¿ô¤ò¼õ¤±¼è¤ëÊýË¡¤âÍÑ°Õ¤·¤Æ¤¤¤Þ¤¹¡£

----

**£²¡¥¥¯¥é¥¹´Ö¤Î¶¦ÄÌÀ­¤ò³ÎÊÝ

¡¡IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤µ¤Þ¤¶¤Þ¤Ê¥¯¥é¥¹¤Ï¡¢°Û¤Ê¤ë¼ïÎà¤ÎÃƤòÀ¸À®¤¹¤ëµ¡Ç½¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¥²¡¼¥àÆâ¤Î°Û¤Ê¤ëÍ×Áǡʥץ쥤¥ä¡¼¥­¥ã¥é¥¯¥¿¡¼¡¢Å¨¥­¥ã¥é¥¯¥¿¡¼¡¢Ë¤Âæ¤Ê¤É¡Ë¤¬''¶¦Ä̤ÎÃÆÀ¸À®µ¡Ç½¤ò¼Â¹Ô¤Ç¤­¤ë''¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

----

**£³¡¥¥¯¥é¥¹´Ö¤ÎÁ·ë¹çÀ­¤ÎÂ¥¿Ê

¡¡IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò²ð¤·¤ÆÃÆÀ¸À®¤Îµ¡Ç½¤òÄêµÁ¤¹¤ë¤³¤È¤Ç¡¢¥¯¥é¥¹´Ö¤ÎÁ·ë¹çÀ­¤¬¸þ¾å¤·¤Þ¤¹¡£
¥¯¥é¥¹¤¬¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤À¤±¤Ç¡¢Â¾¤Î¥¯¥é¥¹¤È¤ÎÏ¢·È¤¬Íưפˤʤê¤Þ¤¹¡£

----

**£´¡¥³ÈÄ¥À­¤ÈÊݼéÀ­¤Î³ÎÊÝ

¡¡¥²¡¼¥àÆâ¤Ë¿·¤·¤¤¼ïÎà¤ÎÃƤòÄɲ乤ëºÝ¤Ë¡¢IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤À¤±¤Ç¿·¤·¤¤ÃƤÎÀ¸À®µ¡Ç½¤òÄɲäǤ­¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢¿·¤·¤¤Í×ÁǤò´Êñ¤ËÅý¹ç¤·¡¢ÊݼéÀ­¤Î¹â¤¤¥³¡¼¥É¤ò¼Â¸½¤Ç¤­¤Þ¤¹¡£

----

¡¡Áí¹ç¤¹¤ë¤È¡¢IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï¡¢¥²¡¼¥àÆâ¤ÇÃƤòÀ¸À®¤¹¤ëµ¡Ç½¤ò¶¦Ä̲½¤·¡¢½ÀÆðÀ­¤ÈÊݼéÀ­¤ò¸þ¾å¤µ¤»¤ë¤¿¤á¤Î´ðÈפòÄ󶡤¹¤ëÌò³ä¤ò²Ì¤¿¤·¤Æ¤¤¤Þ¤¹¡£

----

*£³¡¥GeneratorBase ¥¯¥é¥¹¤ÎºîÀ®

¡¡Ãê¾Ý¥¯¥é¥¹¤È¤·¤Æ GeneratorBase ¥¯¥é¥¹¤òºîÀ®¤·¡¢IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Þ¤¹¡£

¡¡¼ÂÁõ¤Ë¤¢¤¿¤ê¡¢GenerateBullet ¥á¥½¥Ã¥É¤ò''Ãê¾Ý¥á¥½¥Ã¥É''¤È¤·¤ÆÄêµÁ¤·¤Þ¤¹¡£
Ãê¾Ý¥á¥½¥Ã¥É¤â¡¢¤¢¤¯¤Þ¤Ç¤â¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë¤Î¤ß¤Ç¡¢¿¶¤ëÉñ¤¤¤Ë¤Ä¤¤¤Æ¤Ï¥µ¥Ö¥¯¥é¥¹¤Ë°Ñ¤Í¤Æ¤¤¤Þ¤¹¡£

¡¡Ä̾ï¤Î¥á¥½¥Ã¥É¤Ç¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥á¥½¥Ã¥É¤ò¼ÂÁõ¤·¤Æ¤·¤Þ¤¦¤È¡¢¤³¤Î¥¯¥é¥¹Æâ¤Ç¤ÎÄêµÁ¤È¤Ê¤ê¡¢¥µ¥Ö¥¯¥é¥¹¤Ç¤Î¾å½ñ¤­¤¬Ç¤°Õ¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤¹¤¬¡¢
''Ãê¾Ý¥á¥½¥Ã¥É¤È¤·¤ÆÄêµÁ¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢¤³¤Î¥¯¥é¥¹¤Ç¤ÏÆâÉô¤Î¼ÂÁõ¤ò¤»¤º¡¢¥µ¥Ö¥¯¥é¥¹¤Ç¤Î¼ÂÁõ¤ò¶¯À©¤¹¤ë''¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

----

''GeneratorBase.cs''
[+] <= ¥¯¥ê¥Ã¥¯¤·¤¿¤é³«¤­¤Þ¤¹¡£
=|BOX|
using UnityEngine;
using UnityEngine.Pool;

public abstract class GeneratorBase : MonoBehaviour, IGeneratable
{
[SerializeField] protected float bulletSpeed = 30;

[SerializeField] protected GeneratorBase bulletPrefab;
protected CharaController charaController;

// TODO ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëµ¡Ç½¤òÄɲ乤ë


/// <summary>
/// ½é´üÀßÄê
/// </summary>
public virtual void SetUpBulletGenerator(CharaController charaController)
{
this.charaController = charaController;
Debug.Log("½é´üÀßÄê ´°Î»");
}


public abstract void GenerateBullet(Vector2 direction);

public abstract void GenerateBullet<T>(Vector2 direction, T t);
}
||=
[END]

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥á¥½¥Ã¥É¤òÄêµÁ¤¹¤ë½çÈ֤˻ØÄê¤Ï¤¢¤ê¤Þ¤»¤ó¡£
Î㤨¤Ð¡¢GenerateBullet ¥á¥½¥Ã¥É¤ÎÄêµÁ¤ò¤·¤Æ¤«¤é SetUp ¥á¥½¥Ã¥É¤ÎÄêµÁ¤ò¹Ô¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£

----

¡¡GeneratorBase ¥¯¥é¥¹¤Ï¡¢¥¢¥¯¥·¥ç¥ó¥²¡¼¥à¤Ë¤ª¤±¤ëÃƤÎÀ¸À®µ¡Ç½¤Î''´ðÈפȤʤë¿Æ¥¯¥é¥¹''¤Ç¤¹¡£

¡¡°Ê²¼¤Ï¤½¤ÎÀ߷פȼÂÁõ¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀ¤Ç¤¹¡£

----

**£±¡¥Ãê¾Ý¥¯¥é¥¹¤È¤·¤Æ¤Î GeneratorBase

¡¡GeneratorBase ¥¯¥é¥¹¤Ï''Ãê¾Ý¥¯¥é¥¹''¤È¤·¤Æ¼ÂÁõ¤µ¤ì¤Þ¤¹¡£
Ãê¾Ý¥¯¥é¥¹¤Ï¡¢''°ìÉô¤Î¥á¥½¥Ã¥É¤¬Ì¤¼ÂÁõ¡ÊÃê¾Ý¥á¥½¥Ã¥É¡Ë''¤Ç¤¢¤ê¡¢¶ñÂÎŪ¤Ê¿¶¤ëÉñ¤¤¤Ï''¥µ¥Ö¥¯¥é¥¹(»Ò¥¯¥é¥¹)¤ÇÄ󶡤µ¤ì¤ë''¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£

¡¡ÃƤòÀ¸À®¤¹¤ë¡¢¤È¤¤¤¦¼Â¹Ô½èÍý¼«ÂΤ϶¦Ä̤·¤Æ¤¤¤Þ¤¹¤¬¡¢ÆâÉôŪ¤ÊÃƤÎÀ¸À®½èÍý¤Ë¤Ä¤¤¤Æ¤Ï¡¢¸Ä¡¹¤Î¥µ¥Ö¥¯¥é¥¹¤ËǤ¤»¤ë·Á¤Ç¤¹¡£

¡¡¤³¤ÎÀ߷פˤè¤ê¡¢''¶¦Ä̤ﶤëÉñ¤¤¤òÃê¾Ý¥¯¥é¥¹¤ÇÄêµÁ¤·¡¢¸ÄÊ̤ﶤëÉñ¤¤¤ò¥µ¥Ö¥¯¥é¥¹¤Ç¥«¥¹¥¿¥Þ¥¤¥º¤¹¤ë''¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

----

**£²¡¥IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¼ÂÁõ

¡¡IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÏÃƤòÀ¸À®¤¹¤ëµ¡Ç½¤òµ¬Äꤹ¤ë¤â¤Î¤Ç¤¹¡£
GeneratorBase ¥¯¥é¥¹¤Ï¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢ÃƤòÀ¸À®¤¹¤ëµ¡Ç½¤ò¶¦Ä̤Υ¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÇÄ󶡤·¡¢°Û¤Ê¤ë¼ïÎà¤ÎÃƤËÂФ·¤Æ¤âÅý°ìŪ¤ÊÁàºî¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£

----

**£³¡¥GenerateBullet ¥á¥½¥Ã¥É¤ÎÃê¾ÝÄêµÁ

¡¡GeneratorBase ¥¯¥é¥¹¤Ë¤Ï¡¢IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î°ìÉô¤È¤·¤ÆGenerateBullet¥á¥½¥Ã¥É¤¬¤¢¤ê¤Þ¤¹¡£
¤³¤Î¥á¥½¥Ã¥É¤ÏÃê¾Ý¥á¥½¥Ã¥É¤È¤·¤ÆÄêµÁ¤µ¤ì¤Þ¤¹¡£
Ãê¾Ý¥á¥½¥Ã¥É¤Ï¥á¥½¥Ã¥É¤Î¼ÂÁõ¤ò»ý¤¿¤º¡¢¥µ¥Ö¥¯¥é¥¹¤Ë¤ª¤¤¤Æɬ¤º¥ª¡¼¥Ð¡¼¥é¥¤¥É¤µ¤ì¤ë¤³¤È¤ò¶¯À©¤·¤Þ¤¹¡£

¡¡¤³¤ì¤Ë¤è¤ê¡¢¥µ¥Ö¥¯¥é¥¹¤Ç¤ÎÃƤÎÀ¸À®µ¡Ç½¤Î¥«¥¹¥¿¥Þ¥¤¥º¤òÊݾڤ·¡¢¼ÂÁõ˺¤ì¤òËɤ°¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

----

**£´¡¥MonoBehaviour ¥¯¥é¥¹¤Î·Ñ¾µ

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¼«ÂΤϼºݤˤϥ·¥ê¥¢¥é¥¤¥º¤Ç¤­¤Þ¤»¤ó¤¬¡¢''¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¥¯¥é¥¹¤Ï¥·¥ê¥¢¥é¥¤¥º²Äǽ''¤Ç¤¹¡£
¤·¤¿¤¬¤Ã¤Æ¡¢¥·¥ê¥¢¥é¥¤¥º¤¬É¬Íפʾì¹ç¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤¿¥¯¥é¥¹¤ò¥·¥ê¥¢¥é¥¤¥º¤¹¤ë¤³¤È¤Çɽ¸½¤Ç¤­¤Þ¤¹¡£

¡¡Unity ¤Î¾ì¹ç¡¢MonoBehaviour ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤ë¥¯¥é¥¹¤ä¡¢System.Serializable °À­¤òÉÕÍ¿¤·¤¿¥¯¥é¥¹¤Ï¥·¥ê¥¢¥é¥¤¥º¤¬²Äǽ¤È¤Ê¤ê¡¢
¤½¤ì¤é¤Î¥¯¥é¥¹¤Ï¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤¹¤ë²¸·Ã¤ò¼õ¤±¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Ã±ÆȤξì¹ç¤Ë¤Ï¡¢¤³¤Î¥·¥ê¥¢¥é¥¤¥º¤ËÂбþ¤¬¤Ç¤­¤Ê¤¤¤¿¤á¡¢Î㤨¤Ð¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ç¤Î³Îǧ¤ä¡¢¥¢¥µ¥¤¥ó¤Ê¤É¤¬¹Ô¤¨¤Þ¤»¤ó¡£

¡¡º£²ó¡¢GeneratorBase ¥¯¥é¥¹¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤³¤Î¥¯¥é¥¹¤ò¿Æ¥¯¥é¥¹¤È¤·¤¿»Ò¥¯¥é¥¹¤Î¾ðÊó¤Ï¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£

¡¡»Ò¥¯¥é¥¹¤ËľÀÜ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤»¤º¤Ë¡¢¿Æ¥¯¥é¥¹¤Ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤·¤Æ¤¤¤ë¤³¤È¤Ç¡¢¤³¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¥·¥ê¥¢¥é¥¤¥º¤Ë´Ø¤¹¤ëÌäÂê¤â²óÈò¤·¤Æ¤¤¤Þ¤¹¡£
¡¡
----

¡¡GeneratorBase ¤òÃê¾Ý¥¯¥é¥¹¤È¤·¤ÆÀ߷פ·¡¢IGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤ê¡¢GeneratorBase ¤Î¥µ¥Ö¥¯¥é¥¹¤ÏIGeneratable¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î¼ÂÁõ¤ò¶¯À©¤µ¤ì¤ë¤À¤±¤Ç¤Ê¤¯¡¢¥·¥ê¥¢¥é¥¤¥º¤Ë´Ø¤¹¤ëÌäÂê¤â²óÈò¤Ç¤­¤Þ¤¹¡£
³Æ¥µ¥Ö¥¯¥é¥¹¤ÏIGeneratable¤ò¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢ºÆÍøÍÑÀ­¤äÊݼéÀ­¤¬¹â¤Þ¤ê¤Þ¤¹¡£

¡¡¤³¤ÎÀ߷פˤè¤ê¡¢GeneratorBase ¥¯¥é¥¹¤ò·Ñ¾µ¤¹¤ë¶ñÂÎŪ¤ÊÃƤΥ¯¥é¥¹¤Ï¡¢É¬¤ºGenerateBullet¥á¥½¥Ã¥É¤ò¼ÂÁõ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤³¤ì¤Ë¤è¤Ã¤Æ¡¢ÃƤÎÀ¸À®¤Îή¤ì¤òÅý°ìŪ¤Ë´ÉÍý¤·¤Ä¤Ä¡¢¸ÄÊ̤ÎÃÆÀ¸À®¥¯¥é¥¹¤´¤È¤Ë°Û¤Ê¤ëÀ¸À®¤òÄ󶡤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

----

*£´¡¥¥µ¥ó¥×¥ë¥¯¥é¥¹¤Ë¤è¤ë¥·¥ê¥¢¥é¥¤¥º¾ðÊó¤ÎÈæ³ÓÎã

¡¡¶ñÂÎŪ¤Ê¥µ¥Ö¥¯¥é¥¹¤ÎºîÀ®¤ËÆþ¤ëÁ°¤Ë¡¢¥µ¥ó¥×¥ë¥¯¥é¥¹¤òºîÀ®¤·¤Æ¡¢''¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ç¤Î¥·¥ê¥¢¥é¥¤¥º''¤Ë¤Ä¤¤¤Æ³Îǧ¤·¤Æ¤ª¤­¤Þ¤·¤ç¤¦¡£

¡¡¥¯¥é¥¹Æâ¤Ë IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î List ¤È GeneratorBase ¥¯¥é¥¹¤Î List ¤ò¤½¤ì¤¾¤ìºîÀ®¤·¡¢SerializeField°À­¤òÉÕÍ¿¤·¤Þ¤¹¡£
¤³¤Î¥µ¥ó¥×¥ë¥¯¥é¥¹¤òǤ°Õ¤Î¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ¤ß¤Æ¤¯¤À¤µ¤¤¡£¤½¤ì¤¾¤ì¤ÎµóÆ°¤¬°Û¤Ê¤ë¤³¤È¤¬Ê¬¤«¤ê¤Þ¤¹¡£

----

''TestInspector.cs''
[+]¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using System.Collections.Generic;
using UnityEngine;

public class TestInspector : MonoBehaviour
{
[SerializeField] private List<IGeneratable> generatableList = new();
[SerializeField] private List<GeneratorBase > generatorList = new();
}
||=
[END]

----

**£±¡¥IGeneratable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Î List

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï SerializeField°À­¤òÉÕÍ¿¤·¤Æ¤â¡¢public ½¤¾þ»Ò¤ÇÀë¸À¤·¤Æ¤¤¤Æ¤â¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ë¤Ïɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/ZAV_lVNbXT.png, 35%)

----

¡¡¥Ç¥Ð¥Ã¥°¥â¡¼¥É¤Ë¤·¤Æ¤âɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/KbdyaFeOpo.png, 35%)
¡¡

----

**£²¡¥GeneratorBase ¥¯¥é¥¹¤Î List

¡¡¤³¤Á¤é¤Ï¥¯¥é¥¹¤Ç¤¢¤ë¤¿¤á¡¢¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/E4Z67eONjb.png, 35%)


¡¡º£²ó¤Î¤è¤¦¤Ë MonoBehaviour ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¼«Æ°Åª¤Ë¥·¥ê¥¢¥é¥¤¥º¤µ¤ì¤Þ¤¹¤¬¡¢
MonoBehaviour ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë¤Ï¼«Æ°Åª¤Ë¤Ï¥·¥ê¥¢¥é¥¤¥º¤µ¤ì¤Ê¤¤¤¿¤á¡¢¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÈƱ¤¸¤è¤¦¤Ë¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤Þ¤»¤ó¡£
¤½¤Î¾ì¹ç¡¢¥¯¥é¥¹¤Ë System.Serializable °À­¤òÉÕÍ¿¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£

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

¡¡Ê£¿ô²ó¤Î¼ê½ç¤Ëʬ¤±¤Æ³Ø½¬¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡°ú¤­Â³¤­¡¢¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¼êË¡¤ò³Ø½¬¤·¤Þ¤·¤ç¤¦¡£

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

----

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

=|PERL|
¡¡¡¦Ãê¾Ý²½¡Ê¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¡¢Ãê¾Ý¥¯¥é¥¹¡¢¥¯¥é¥¹¤Î·Ñ¾µ¡Ë
||=

¡¡¤Ê¤ª¡¢½èÍýÆâ¤Ç¤ÏÈóƱ´ü½èÍý¤È¤·¤Æ UniTask ¤òºÎÍѤ·¤Æ¤¤¤Þ¤¹¡£

----

*£±¡¥¥¨¥Õ¥§¥¯¥ÈÍѤΥ¢¥»¥Ã¥È¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤ÆUnity¤Ë¥¤¥ó¥Ý¡¼¥È¤¹¤ë

**£±¡¥Àß·×

¡¡¤Þ¤º¤Ï¥²¡¼¥àÆâ¤Î''¤É¤Î¾ìÌ̤ǥ¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë¤«¤òÁÛÄꤷ¡¢¤É¤Î°Ì¤Î¼ïÎà¤Î¥¨¥Õ¥§¥¯¥È¤¬É¬Íפˤʤ뤳¤È¤òÇÄ°®¤·¤Þ¤¹''¡£
Î㤨¤Ð¡¢°Ê²¼¤Î¤è¤¦¤Ê¼ïÎà¤Ç¤¹¡£º¸Â¦¤¬ÁÛÄꤹ¤ë¥Õ¥¡¥¤¥ë̾¡¢±¦Â¦¤¬¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë¾ìÌ̤Ǥ¹¡£

''¡ã¥¨¥Õ¥§¥¯¥È¡¦¥ê¥¹¥È¡ä''
=|PERL|
¡¡£±¡¥Hit -- ¹¶·âÌ¿Ãæ»þ
¡¡£²¡¥Damage ¡¡-- Ũ¤«¤é¤Î¹¶·â¤ÎÈïÃÆ»þ
¡¡£³¡¥ItemGet¡¡ -- ¥¢¥¤¥Æ¥à¼èÆÀ»þ
¡¡£´¡¥LevelUp¡¡ --¡¡¥ì¥Ù¥ë¥¢¥Ã¥×»þ
||=

¡¡¤³¤Î¤è¤¦¤Ë¥ê¥¹¥È²½¤·¤Æ½ñ¤­½Ð¤·¤Æ¤ª¤¯¤È´ÉÍý¤·¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£

¡¡º£¸å¡¢¥¨¥Õ¥§¥¯¥È¤òÍøÍѤ¹¤ë¾ìÌ̤¬Áý¤¨¤¿¤ê¡¢Êѹ¹¤·¤¿¤¤¡¢¤È¤¤¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢¾åµ­¤ËÄɲäò¤·¤Æ¸¡Æ¤¤·¤Æ¤¯¤À¤µ¤¤¡£

----

**£²¡¥¥¢¥»¥Ã¥È¥¹¥È¥¢¤è¤ê¡¢¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë¾ìÌ̤ò¥¤¥á¡¼¥¸¤·¤Æ¡¢Ç¤°Õ¤Î¥¢¥»¥Ã¥È¤òõ¤·¤Æ Unity ¤Ë¥¤¥ó¥Ý¡¼¥È¤¹¤ë

¡¡¥¨¥Õ¥§¥¯¥È¤Ë¤Ï¥Ñ¡¼¥Æ¥£¥¯¥ë¥·¥¹¥Æ¥à¡¢¤¢¤ë¤¤¤Ï Animator ¤òÍøÍѤ·¤ÆºîÀ®¤µ¤ì¤¿¥¢¥»¥Ã¥È¤òÍøÍѤ·¤Þ¤¹¡£
¥¢¥»¥Ã¥È¥¹¥È¥¢¤è¤êǤ°Õ¤Î¥¢¥»¥Ã¥È Unity ¥¤¥ó¥Ý¡¼¥È¤·¤Æ¡¢¥²¡¼¥àÆâ¤Ç¥¨¥Õ¥§¥¯¥È¤òºÆÀ¸¤¹¤ë¤¿¤á¤Î½àÈ÷¤ò¤·¤Þ¤¹¡£

¡¡Æ¬¤ÎÃæ¤Ç¾ìÌ̤ò»×¤¤É⤫¤Ù¤Ê¤¬¤é¡¢¤É¤ó¤Ê¥¨¥Õ¥§¥¯¥È¤¬¤è¤¤¤«¡¢³Îǧ¤·¤Ê¤¬¤é·è¤á¤Æ¤¤¤­¤Þ¤·¤ç¤¦¡£
Àè¤Û¤ÉÄ󼨤·¤¿¾ìÌ̤˹ç¤ï¤»¤Æ¡¢¹ç·×¤Ç£³¼ïÎà¤Î¥¨¥Õ¥§¥¯¥ÈÍѤΥ²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤òÍÑ°Õ¤ò¤·¤Æ¤¯¤À¤µ¤¤¡£
¥Ñ¡¼¥Æ¥£¥¯¥ë¤Ç¤â Animator ¤Ç¤â¤É¤Á¤é¤Ç¤âÌäÂꤢ¤ê¤Þ¤»¤ó¡£

¡¡¤Þ¤¿Ê¬³ä²Äǽ¤Ê²èÁü¤òÍøÍѤ¹¤ì¤Ð¥Ñ¡¼¥Æ¥£¥¯¥ë¤Î Texture Sheet Animation ¤ä¡¢Animator ÍѤΠAnimationClip ¤òºîÀ®²Äǽ¤Ç¤¹¡£


Unity¸ø¼°¥Þ¥Ë¥å¥¢¥ë~~¥Ñ¡¼¥Æ¥£¥¯¥ë¥·¥¹¥Æ¥à~~https://docs.unity3d.com/ja/current/Manual/class-ParticleSystem.html

Unity¸ø¼°¥Þ¥Ë¥å¥¢¥ë~~Texture Sheet Animation ¥â¥¸¥å¡¼¥ë~~https://docs.unity3d.com/ja/current/Manual/PartSysTexSheetAnimModule.html

----

¡¡½ÐÍè¤ì¤ÐÊ£¿ô¤Î¥¢¥»¥Ã¥È¤ò¥¤¥ó¥Ý¡¼¥È¤·¤Æ¡¢Unity Æâ¤ÇºÆÀ¸¤·¤Æ¤ß¤ë¤È¤è¤¤¤Ç¤·¤ç¤¦¡£

----

*£²¡¥¥¨¥Õ¥§¥¯¥ÈÍѤΥ¯¥é¥¹¤ÎºîÀ®¤ò¹Ô¤¦

**£±¡¥Àß·×

¡¡¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤Î´ÉÍý¤Ë¤Ï¡¢¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤Îµ¡Ç½¤È¡¢¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤òÍøÍѤ·¤Þ¤¹¡£

¡¡Ê£¿ô¤Î¼ïÎà¤Î¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤ò¥¹¥¯¥ê¥×¥¿¥Ö¥ë¡¦¥ª¥Ö¥¸¥§¥¯¥È¤òÍøÍѤ¹¤ë¤³¤È¤Ç¥Ç¡¼¥¿¥Ù¡¼¥¹¤È¤·¤Æ´ÉÍý¤·¡¢É¬ÍפʾðÊó¤Ë¥¢¥¯¥»¥¹¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£

¡¡À¸À®¤µ¤ì¤¿¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò»ý¤¿¤»¡¢·«¤êÊÖ¤·ºÆÍøÍѤǤ­¤ë¤è¤¦¤Ë¤·¤Þ¤¹¡£

¡¡¤½¤Î¤¿¤á¤Ë¡¢¤Þ¤º¤Ï¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤Îµ¡Ç½¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Î¡¢¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥ÖÍѤΥ¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£

=|PERL|
¡¡£±¡¥IPoolable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
¡¡£²¡¥PoolBase Ãê¾Ý¥¯¥é¥¹
¡¡£³¡¥EffectPlayerBase ¥¯¥é¥¹
¡¡£´¡¥EffectPlayerBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿¥µ¥Ö¥¯¥é¥¹
||=

¡¡£±¤Ï¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¡¢£²¤ÏÃê¾Ý¥¯¥é¥¹¤Ç¤¹¤Î¤Ç¡¢¤³¤ì¤é¤Ï¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤Ë¤Ï¥¢¥¿¥Ã¥Á¤Ç¤­¤Þ¤»¤ó¡£
¤½¤Î¤¿¤á¡¢£³¤òºîÀ®¤·¡¢¤³¤ì¤ò¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤Ë¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
¡¡
¡¡¤Þ¤¿³Æ¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤´¤È¤Ë½èÍý¤Î¤Õ¤ë¤Þ¤¤¤òÊѤ¨¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢£´¤ò¤½¤ì¤¾¤ì¤Î¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤´¤È¤ËºîÀ®¤·¡¢
£³¤ÎÂå¤ï¤ê¤Ë£´¤Î¤ß¤ò¥¢¥¿¥Ã¥Á¤·¤ÆÍøÍѤ·¤Þ¤¹¡£

----

**£²¡¥IPoolable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ÎºîÀ®

¡¡¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤¹¡£¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Ë¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ëÍѤζ¦Ḁ̈᥽¥Ã¥É¤òÄ󶡤·¤Þ¤¹¡£


''IPoolable.cs''
[+]¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
/// <summary>
/// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤òÍøÍѤ·¤ÆºÆÍøÍѤµ¤ì¤ë¥¯¥é¥¹¤Ë¼ÂÁõ¤¹¤ë¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹
/// »ÈÍÑÍÑÅӤȤ·¤Æ¤Ï¡¢¥¨¥Õ¥§¥¯¥È¡¢Å¨¡¢ÃÆ¡¢¥É¥í¥Ã¥×¥¢¥¤¥Æ¥à¡¢¥Õ¥í¡¼¥Èɽ¼¨¤Ê¤É
/// </summary>
public interface IPoolable {
void Release();
}
||=
[END]


----

**£³¡¥PoolBase ¥¯¥é¥¹¤ÎºîÀ®

¡¡ÍÍ¡¹¤Ê¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤Ç¤­¤ë¡¢ÈÆÍÑ·¿¤ÎÃê¾Ý¥¯¥é¥¹¤Ç¤¹¡£
Ãê¾Ý¥¯¥é¥¹¤Ç¤¹¤Î¤Ç¡¢É¬¤º¤Û¤«¤Î¥¯¥é¥¹¤Ë·Ñ¾µ¤·¤ÆÍøÍѤ·¤Þ¤¹¡£


''PoolBase.cs''
[+]¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;
using UnityEngine.Pool;

/// <summary>
/// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë²½¤¹¤ë¤¿¤á¤ÎÈÆÍѤÎÃê¾Ý¥¯¥é¥¹
/// </summary>
public abstract class PoolBase : MonoBehaviour {

protected IObjectPool<PoolBase> objectPool;

// ObjectPool ¤Ø¤Î»²¾È¤òÍ¿¤¨¤ë¥×¥í¥Ñ¥Æ¥£
public IObjectPool<PoolBase> ObjectPool { get => objectPool; set => objectPool = value; }
}
||=
[END]

----

**£´¡¥EffectPlayerBase ¥¯¥é¥¹¤ÎºîÀ®

¡¡Ãê¾Ý¥¯¥é¥¹¤Ç¤¢¤ë PoolBase ¤ò·Ñ¾µ¤·¤Æ¡¢¥¨¥Õ¥§¥¯¥ÈÍѤΥ١¼¥¹¡Ê¿Æ¡Ë¥¯¥é¥¹¤òºîÀ®¤·¤Þ¤¹¡£
PlayEffect ¥á¥½¥Ã¥É¤ò²¾Áۥ᥽¥Ã¥É¤È¤·¤ÆÍÑ°Õ¤·¡¢¶ñÂÎŪ¤Ê½èÍý¤Î¤Õ¤ë¤Þ¤¤¤Ï³Æ¥¨¥Õ¥§¥¯¥È¤Ë°Í¸¤Ç¤­¤ë¤è¤¦¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
¤Þ¤¿ IPoolable ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ë¤è¤ë Release ¥á¥½¥Ã¥É¤âƱÍͤ˲¾Áۥ᥽¥Ã¥É¤È¤·¤Æ¼ÂÁõ¤·¤Æ¡¢
¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ØÌá¤ë½èÍý¤ò¶¦Ä̲½¤·¤¿¤¦¤¨¤Ç¡¢¤Õ¤ë¤Þ¤¤¤òÊѤ¨¤é¤ì¤ë¤è¤¦¤ËÍÑ°Õ¤·¤Æ¤¤¤Þ¤¹¡£

¡¡¥á¥ó¥ÐÊÑ¿ô¤Ë¤Ï Index ¤« enum ¤Ç¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤òÆÃÄꤹ¤ë¤¿¤á¤Î¾ðÊó¤òÀßÄꤷ¤Þ¤¹¡£
¤³¤ì¤Ï¤É¤Á¤é¤òÍøÍѤ·¤Æ¤âÌäÂꤢ¤ê¤Þ¤»¤ó¤Î¤Ç¡¢¼«Ê¬¤Î¼ÂÁõ¤Ë¹ç¤ï¤»¤ÆºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£

¡¡''enum ¤òÍøÍѤ¹¤ë¾ì¹ç¤Ë¤Ï¡¢¼¡¤Î¼ê½ç¤Ç¼ÂÁõ¤·¤Þ¤¹¤Î¤Ç¡¢¼ÂÁõ¤Î¸å¤Ë¥á¥ó¥ÐÊÑ¿ô¤òÄɲ䷤Ƥ¯¤À¤µ¤¤¡£''


''EffectPlayerBase.cs''
[+]¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using UnityEngine;
using Cysharp.Threading.Tasks;
using System.Threading;

/// <summary>
/// ¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤Ë¥¢¥¿¥Ã¥Á¤·¤Æ ID / enum ¤òÀßÄꤹ¤ë
/// PoolBase ¤ò·Ñ¾µ¤·¤Æ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÂбþ¤µ¤»¤ë
/// </summary>
public class EffectPlayerBase : PoolBase, IPoolable {

public int eff_index;
public EffectName effectName;


/// <summary>
/// ¥¨¥Õ¥§¥¯¥È¤ÎºÆÀ¸
/// Forget ÉÕ¤­¤Ç¼Â¹Ô¤¹¤ë
/// </summary>
/// <param name="duation"></param>
/// <param name="targetPosition"></param>
/// <param name="token"></param>
/// <returns></returns>
public virtual async UniTask PlayEffect(float duation, Vector2 targetPosition, CancellationToken token) {

//Debug.Log($"{this} ¥¨¥Õ¥§¥¯¥È³«»Ï");

// ¥¨¥Õ¥§¥¯¥È¤Î°ÌÃÖÀßÄê
transform.position = targetPosition;

// ¥¨¥Õ¥§¥¯¥Èɽ¼¨»þ´ÖʬÂÔµ¡
await UniTask.Delay((int)duation * 1000, cancellationToken : token);

// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹
Release();

//Debug.Log($"{this} ¥ê¥ê¡¼¥¹´°Î»");
}

/// <summary>
/// ¥ª¥Ö¥¸¥§¥¯¥È¥×¡¼¥ë¤ËÌ᤹
/// </summary>
public virtual void Release() {

// TODO ½ÅÊ£¤·¤ÆÌá¤é¤Ê¤¤¤è¤¦¤ËȽÄê¤òÆþ¤ì¤ë

ObjectPool.Release(this);

// TODO ¤Û¤«¤Ë¤âÌá¤ë¥¿¥¤¥ß¥ó¥°¤Ç¹Ô¤¤¤¿¤¤½èÍý¤òÄɲ乤ë

}
}
||=
[END]

----

**£µ¡¥EffectPlayerBase ¥¯¥é¥¹¤ò·Ñ¾µ¤·¤¿¥µ¥Ö¥¯¥é¥¹

¡¡¥µ¥ó¥×¥ë¤È¤·¤Æ¡¢¥µ¥Ö¥¯¥é¥¹¤ò£±¤ÄÄ󼨤·¤Æ¤ª¤­¤Þ¤¹¡£
PlayEffect ¥á¥½¥Ã¥É¤Î¤ß¾å½ñ¤­¤·¤Æ¤Õ¤ë¤Þ¤¤¤òÊѤ¨¡¢Release ¥á¥½¥Ã¥É¤Ï¿Æ¥¯¥é¥¹¤Î¥á¥½¥Ã¥É¤ò¤½¤Î¤Þ¤ÞÍøÍѤ·¤Æ¤¤¤Þ¤¹¡£

¡¡¤³¤Î»þÅÀ¤Ç¤³¤Î¥µ¥Ö¥¯¥é¥¹¤Ï¡¢MonoBehaviour¡¢PoolBase¡¢¤½¤·¤Æ EffectPlayerBase ¤Îµ¡Ç½¤òÍ­¤·¤Æ¤¤¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£


''LevelUpEffect.cs''
[+]¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤­¤Þ¤¹
=|BOX|
using Cysharp.Threading.Tasks;
using System.Threading;
using UnityEngine;

public class LevelUpEffect : EffectPlayerBase
{
[SerializeField] private float scaleRate;


/// <summary>
/// ¥ì¥Ù¥ë¥¢¥Ã¥×ÍѤΥ¨¥Õ¥§¥¯¥ÈºÆÀ¸
/// </summary>
/// <param name="duation"></param>
/// <param name="targetPosition"></param>
/// <param name="token"></param>
/// <returns></returns>
public override async UniTask PlayEffect(float duation, Vector2 targetPosition, CancellationToken token) {

// ¥µ¥¤¥ºÀßÄê
transform.localScale = Vector3.one * scaleRate;

// ¥¨¥Õ¥§¥¯¥È¤ò¥×¥ì¥¤¥ä¡¼¤Î»Ò¤Ë¤·¤ÆÄɽ¾¤µ¤»¤ë
transform.SetParent(PlayerManager.instance.transform);

await base.PlayEffect(duation, targetPosition, token);

// ¥¨¥Õ¥§¥¯¥È¤ò EffectManager ¤Î»Ò¤ËÌ᤹
transform.SetParent(EffectManager.instance.transform);
}
}
||=
[END]

----

*£³¡¥¥¨¥Õ¥§¥¯¥ÈÍѤΥץì¥Ï¥Ö¤Ë EffectPlayerBase ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤¹¤ë

¡¡¤¤¤Ã¤¿¤ó¡¢¤¹¤Ù¤Æ¤Î¥¨¥Õ¥§¥¯¥ÈÍѤΥץì¥Ï¥Ö¤Ë EffectPlayerBase ¥¯¥é¥¹¤ò¥¢¥¿¥Ã¥Á¤·¤Þ¤¹¡£
Index ¤Ë¤Ä¤¤¤Æ¤Ï¡¢°ì°Õ¤ÎÃͤòÀßÄꤷ¡¢¤Û¤«¤Î¥¨¥Õ¥§¥¯¥È¤Î¥×¥ì¥Ï¥Ö¤È¤ÏƱ¤¸¿ôÃͤˤʤé¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤ª¤­¤Þ¤¹¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/ATQl3917rW.png, 35%)

----

¡¡³Æ¥¨¥Õ¥§¥¯¥È¤´¤È¤Ë¤Õ¤ë¤Þ¤¤¤òÊѤ¨¤¿¤¤¾ì¹ç¤Ë¤Ï¡¢EffectPlayerBase ¥¯¥é¥¹¤ò¥ê¥à¡¼¥Ö¤·¡¢
EffectPlayerBase ¥¯¥é¥¹¤ò¿Æ¥¯¥é¥¹¤Ë¤·¤¿»Ò¥¯¥é¥¹¤òºîÀ®¤·¤Æ¡¢¤½¤ì¤òºÆÅÙ¥×¥ì¥Ï¥Ö¤Ë¥¢¥¿¥Ã¥Á¤·Ä¾¤·¤Þ¤¹¡£


&ref(https://image02.seesaawiki.jp/i/o/i-school-memo/7DJDJYV48p.png, 35%)

----

¡¡°Ê¾å¤Ç¤³¤Î¼ê½ç¤Ï½ªÎ»¤Ç¤¹¡£
//¡¡¡¡¡¡=>¡¡''%%%[[¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øž¤¹¤ëÃƤε¡Ç½­¤>¡Ú£²£Ä¡Û¥×¥ì¥¤¥ä¡¼¤ò¼´¤Ë¤·¤Æ¸øž¤¹¤ëÃƤε¡Ç½­¤]]%%%''

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