For example on my enemy script im pooling bullets with new unity api like this. Everything is fine because i only have 1 spesific projectile prefab.
private ObjectPool<EnemyProjectile> projectilePool;
protected override void Start()
{
base.Start();
_animator = GetComponent<Animator>();
projectilePool = new ObjectPool<EnemyProjectile>(
CreateProjectile,
OnTakeProjectileFromPool,
OnReturnProjectileToPool,
OnDestroyProjectile,
true,
10,
30
);
}
private EnemyProjectile CreateProjectile() => Instantiate(projectilePrefab);
private void OnTakeProjectileFromPool(EnemyProjectile projectile) => projectile.gameObject.SetActive(true);
private void OnReturnProjectileToPool(EnemyProjectile projectile) => projectile.gameObject.SetActive(false);
private void OnDestroyProjectile(EnemyProjectile projectile) => Destroy(projectile.gameObject);
private EnemyProjectile GetProjectile(Vector3 position, Quaternion rotation)
{
EnemyProjectile projectile = projectilePool.Get();
projectile.transform.position = position;
projectile.transform.rotation = rotation;
return projectile;
}
public void ReleaseProjectile(EnemyProjectile projectile) => projectilePool.Release(projectile);
My question is for this senario, everytime i call this method i call with diffrent gameobject. If i create a one object pool for that it wont return correct object everytime. How should i approach this problem?
Should i create a new object pooling for every diffrent type of gameobject?
public static GameObject SpawnAndDestroy(GameObject spawnObj, Vector3 spawnPos, float destroyTime = 3, Transform parent = null)
{
GameObject obj;
if (parent == null)
obj = Instantiate(spawnObj, spawnPos, Quaternion.identity);
else
obj = Instantiate(spawnObj, parent);
Destroy(obj, destroyTime);
return obj;
}