Я устанавливаю механизм объединения объектов в единстве, в основном он работает следующим образом: у вас есть базовый абстрактный класс с именем «Poolable», со статической очередью, содержащей объекты (в данном случае GameObjects), есть классназывается Projectile, который наследуется от Poolable, поскольку это то, что я сейчас хочу объединить.Кроме того, он распространяется на класс Bullet, который наследуется от Projectile, но проблема в том, что если бы у меня был класс Arrow, который наследовал от Projectile, он бы использовал тот же пул, потому что пул статичен внутри Poolable.Кто-нибудь знает, как я мог бы решить эту проблему?
Я думал о том, чтобы сделать его нестатичным, но тогда объекты не знали бы о пуле, они знали бы о своем собственном пуле.То же самое с интерфейсами, но они не принимают переменные, которые не являются свойствами. Единственное текущее исправление, которое я вижу, - это добавление его к каждому сценарию, в котором я использую пул, но это затем наносит ущерб всей цели наследования, когда я пытался создатьполиморфно-подобная структура, где у вас будет несколько пули, несколько снарядов, может быть, несколько пуль / стрел?
public abstract class Poolable : MonoBehaviour
{
protected static Queue<GameObject> objPool = new Queue<GameObject>(); // doesn't work because every poolable object will use this pool only
[SerializeField] protected GameObject prefab;
public GameObject Get()
{
if(objPool.Count == 0)
{
AddObjects();
}
return objPool.Dequeue();
}
protected void ReturnToPool(GameObject retObj)
{
objPool.Enqueue(retObj);
retObj.SetActive(false);
}
AddObjects()
{
}
}