Problem about Reaching Child Object of a Pooled Object
Hello. I am making a infinite runner game on Android and I am using Object Pooling for spawning obstacles. I added my obstacles as parent objects with obstacles and gap for gaining points. I encountered to a problem when I added shooting lasers as a powerup.
I am deactivating the obstacle with laser but when the parent object reactivates, the obstacle that is deactivated is not activating again. How can I solve this problem ? Thanks in advance.
Code for Pooling System:
using System.Collections; using System.Collections.Generic; using UnityEngine;
public class ObjectPoolerforOne : MonoBehaviour {
public static ObjectPoolerforOne SharedInstance;
public List<GameObject> pooledObjects;
public GameObject objectToPool;
public int amountToPool;
public bool shouldExpand;
void Awake()
{
SharedInstance = this;
}
void Start ()
{
pooledObjects = new List<GameObject>();
for (int i = 0; i < amountToPool; i++)
{
GameObject obj = (GameObject)Instantiate(objectToPool);
obj.SetActive(false);
pooledObjects.Add(obj);
}
}
public GameObject GetPooledObject()
{
for (int i = 0; i < pooledObjects.Count; i++)
{
if (!pooledObjects[i].activeInHierarchy)
{
return pooledObjects[i];
}
}
if (shouldExpand)
{
GameObject obj = (GameObject)Instantiate(objectToPool);
obj.SetActive(false);
pooledObjects.Add(obj);
return obj;
}
else
{
return null;
}
}
}
Code for Laser PowerUp :
Rigidbody Physics;
public float speed;
private GameObject ScoreSystem;
private GameObject Meteor;
void Start()
{
Physics = GetComponent<Rigidbody>();
Physics.velocity = transform.forward * speed;
ScoreSystem = GameObject.FindGameObjectWithTag("Player");
}
public void OnTriggerEnter(Collider other)
{
if (other.gameObject.tag == "meteor1")
{
other.gameObject.SetActive(false);
ScoreSystem.GetComponent<Score>().ScoreUp();
StartCoroutine(BringBackTheDead1(1f));
StartCoroutine(KillTheLaser(0.1f));
}
if(other.gameObject.tag == "meteor2")
{
other.gameObject.SetActive(false);
ScoreSystem.GetComponent<Score>().ScoreUp();
StartCoroutine(BringBackTheDead2(1f));
StartCoroutine(KillTheLaser(0.1f));
}
else
{
StartCoroutine(KillTheLaser(0.5f));
}
}
IEnumerator KillTheLaser(float waitTime)
{
yield return new WaitForSeconds(waitTime);
gameObject.SetActive(false);
}
IEnumerator BringBackTheDead1(float waitTime)
{
yield return new WaitForSeconds(waitTime);
gameObject.SetActive(true);
}
IEnumerator BringBackTheDead2(float waitTime)
{
yield return new WaitForSeconds(waitTime);
gameObject.SetActive(true);
}
}
Your answer
Follow this Question
Related Questions
Animate child object IsActive and other properties 1 Answer
Could I get an explanation of object pooling and how to do it? 2 Answers
Instantiated child object position slightly off. Any ideas? 0 Answers
How to open and close a "message box"? 0 Answers
how do I fix this script so the instantiations destroy or get pooled correctly.? 0 Answers