- Home /
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:
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?
Answer by xxmariofer · Jul 28, 2019 at 08:35 PM
I imagine that you are never setting isDestroyed to false aagain after pooling, once you spawn the object you must set it again to false, if you handle the pool just setting inactive you can use the
void OnEnable() { isDestroyed = false; }
if you are just moving the object to another point use the poolboss class and in your spawn method you need to access the isDestroyed property (you will need to make it public first)
Your answer
Follow this Question
Related Questions
OnCollisionEnter fires, but OnCollisionExit does not 1 Answer
Is there a way to wait a certain amount of time before the audio plays again 0 Answers
Problem with spawning with companion AI,Script not working properly when GameObject reactivated? 0 Answers
Can't click gameobject when over another trigger? 1 Answer
How to NOT detect child collider 2 Answers