- Home /
Objects disappear when enabled
I'm using a generic object pool script. It works great for shooting bullets, but doesn't work correctly when spawning enemies at timed intervals. I'm using both with the animator and using the event system to return the objects to the pool queue.
Both work fine when OnBecameInvisible() is called. It's only when I shoot the enemy and OnTriggerEnter() is called that the pooling doesn't work and they disappear.
Any help would be appreciated!
public abstract class GenericObjectPool<T> : MonoBehaviour where T : Component
{
[SerializeField] private T prefab;
[SerializeField] private int objectCount;
public static GenericObjectPool<T> Instance { get; private set; }
private Queue<T> objects = new Queue<T>();
private void Awake()
{
Instance = this;
AddObjects(objectCount);
}
public T Get()
{
return objects.Dequeue();
}
public void ReturnToPool(T objectToReturn)
{
objectToReturn.gameObject.SetActive(false);
objects.Enqueue(objectToReturn);
}
private void AddObjects(int count)
{
for (int i = 0; i < count; i++)
{
var newObject = GameObject.Instantiate(prefab);
newObject.gameObject.SetActive(false);
objects.Enqueue(newObject);
}
}
}
public class Enemy01Pooled : MonoBehaviour { [SerializeField] int startHealth; private int health; public int pointValue; bool isDead; Animator animator; [SerializeField] AudioSource deathAudio;
private void OnEnable()
{
animator = GetComponent<Animator>();
animator.SetBool("isDead", false);
health = startHealth;
isDead = false;
}
private void OnTriggerEnter2D(Collider2D collision)
{
health--;
if (health <= 0)
{
isDead = true;
}
}
private void Update()
{
if (isDead)
{
deathAudio.Play();
Score.Instance.AddPoints(pointValue);
animator.SetBool("isDead", true);
isDead = false;
}
}
private void OnBecameInvisible()
{
Die();
}
public virtual void Die()
{
Enemy01Pool.Instance.ReturnToPool(this);
}
public virtual void KillAll()
{
Score.Instance.AddPoints(pointValue);
Enemy01Pool.Instance.ReturnToPool(this);
}
}
Here is the code for the spawner.`public class EnemySpawner : MonoBehaviour { [SerializeField] float spawnDelay; [SerializeField] float spawnTimer; [SerializeField] int totalEnemies; [SerializeField] float groupIntervalTimer; [SerializeField] float groupTime; [SerializeField] int numberOfSquadronsSpawned = 0; [SerializeField] float[] spawnGroupTimes; [SerializeField] bool readyToSpawn;
void Start()
{
groupTime = spawnGroupTimes[0];
}
void Update()
{
groupIntervalTimer += Time.deltaTime;
if (!readyToSpawn && groupIntervalTimer >= groupTime)
{
numberOfSquadronsSpawned++;
GroupTimer();
}
else if (readyToSpawn && spawnTimer <= 0 && totalEnemies > 0)
{
Spawn();
spawnTimer = spawnDelay;
totalEnemies--;
}
else if (readyToSpawn && totalEnemies > 0)
{
spawnTimer -= Time.deltaTime;
}
else if (readyToSpawn && totalEnemies <= 0)
{
readyToSpawn = false;
if (numberOfSquadronsSpawned >= spawnGroupTimes.Length)
{
gameObject.SetActive(false);
}
}
}
public virtual void Spawn()
{
var spawn = Enemy01Pool.Instance.Get();
if (spawn == null) return;
spawn.transform.position = transform.position;
spawn.transform.rotation = transform.rotation;
spawn.gameObject.SetActive(true);
}
void GroupTimer() //set readyToSpawn to true when we reach next spawnGroupTime
{
totalEnemies = 6;
readyToSpawn = true;
if (numberOfSquadronsSpawned < spawnGroupTimes.Length)
{
groupTime = spawnGroupTimes[numberOfSquadronsSpawned];
}
}
}`
It looks like the objects are getting disabled as they are re-spawned. Only after they are killed, it works fine when they go off screen and OnBecameInvisible() is called. I thought it was something with the animator, but i cant figure out what. I was calling the Die() method through the animation events tool.
Your answer
![](https://koobas.hobune.stream/wayback/20220613045624im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Why do my first few collectable/powerup collisions cause lag but not later ones? 1 Answer
Game "hiccups" when pooled game objects are used for the first time. 0 Answers
How to despawn from another script (PoolManager) 0 Answers
Why am I spawning a ton of prefabs in one area? 2 Answers
How Increase And Decrease And Reset Spawn Rate Over 0 Answers