My spawned obstacle stop working properly after a certain time

Since this is quite hard to explain, this is why I have recorded a video that show the bug:

https://vimeo.com/350615214

As you can see at 20 seconds my pillars stop receiving the trigger information, they aren’t destroyed when hitted and also they don’t deal damage anymore.

Here is the code for the pilar:

using System.Collections;
using System.Collections.Generic;
using DarkTonic.PoolBoss;
using UnityEngine;

public class ObstaclePilar_Infinity : MonoBehaviour
{
    public static InfinityGame GameManager;
    public static GameObject game;
    public GameObject PlayerP;
    public GameObject ParticleHit;
    Collider2D bodycollider;
    Collider2D attackcollider;
    Animator anim;
    bool isDestroyed = false;
    bool particlePlayed = false;

    // Start is called before the first frame update

    private void Awake() {
        isDestroyed = false;
    }

    void Start()
    {
        isDestroyed = false;
        anim = GetComponent<Animator>();
        game = GameObject.FindWithTag("GameController");
        GameManager = game.gameObject.GetComponent<InfinityGame>();
        PlayerP = GameManager.Player;
    }

    // Update is called once per frame
    void Update()
    {
       
    }

    public void DestroyThis()
    {
        PoolBoss.Despawn(transform, true);
    }
   
    private void OnTriggerStay2D(Collider2D other)
    {  
        if (other == PlayerP.GetComponent<CapsuleCollider2D>() && !isDestroyed)
        {
        GameManager.PlayerHit();
        }

        if (other == PlayerP.GetComponent<CircleCollider2D>() && PlayerP.GetComponent<CircleCollider2D>().isTrigger)
        {
            DestroyPilar();
        }
    }

    void DestroyPilar()
    {
        if (!isDestroyed)
        {
            SoundManager.Instance.PlayOneShot(SoundManager.Instance.PunchHit);
            if (!particlePlayed)
            {
                Instantiate(ParticleHit, transform.position, Quaternion.identity);   
            }
            isDestroyed = true;
            anim.SetBool("Destroy", true);  
        }
    }

}

I am using a Pool add-on to handle pooling, I don’t know if its related or not, because after hitting it im sending it back to the pool.

Anyone had any idea where to look and approach the problem?

With pooling, you need to reset all of the data on the object back to its initial state manually. I’m guessing that’s as simple as setting isDestroyed back to false (and the animation data too) during OnEnable() but your pooling asset may work differently, so check the docs and see what method(s) are called when an object is added/removed from the pool.

1 Like