- Home /
[C#] How can I destroy instantiated prefabs when many are created with the same name?
Hi everyone,
I'm trying to make a plant that grows in 4 stages, each stage is a prefab, my script is attached to an empty GameObject, everything is working just fine in my scene except when I want to use this GameObject multiple times at once, because then more than one instance of this script is running and they interfere with each other and causing unwanted results, I was wondering how can I have unique names for every prefab instantiated by the script?
thank you for the help, here is my script if you want to have a look.
using UnityEngine;
using System.Collections;
public class PlantCycle : MonoBehaviour
{
public float plantGrowth = 1;
public float plantSize;
public bool plantStage01 = true;
public bool plantStage02 = false;
public bool plantStage03 = false;
public bool plantStage04 = false;
void Start ()
{
Instantiate (Resources.Load ("Prefabs/Prefab_PlantStage01"), this.transform.position, this.transform.rotation); //Initialate Plant Phase 1
}
void Update ()
{
plantSize = plantSize + plantGrowth * Time.deltaTime;
if (plantSize >= 10 && plantStage02 == false)
{
Instantiate (Resources.Load ("Prefabs/Prefab_PlantStage02"), this.transform.position, this.transform.rotation);
plantStage02 = true;
Destroy (GameObject.Find("Prefab_PlantStage01(Clone)"));
}
else if (plantSize >= 20 && plantStage03 == false)
{
Instantiate (Resources.Load ("Prefabs/Prefab_PlantStage03"), this.transform.position, this.transform.rotation);
plantStage03 = true;
Destroy (GameObject.Find("Prefab_PlantStage02(Clone)"));
}
else if (plantSize >= 30 && plantStage04 == false)
{
Instantiate (Resources.Load ("Prefabs/Prefab_PlantStage04"), this.transform.position, this.transform.rotation);
plantStage04 = true;
Destroy (GameObject.Find("Prefab_PlantStage03(Clone)"));
}
}
}
Answer by Digital-Phantom · Apr 06, 2015 at 01:15 PM
try making your bool variables private, not public
:)
public/private doesn't change the way variables work. You may be thinking of static vs. non-static.
Answer by Owen-Reynolds · Apr 06, 2015 at 04:53 PM
In general, you never need to search by name. If you create something, you just remember what it is, in a variable. Then, later, you can do stuff to it using that variable.
Take a look at the example pages for Instantiate. The general idea is GameObject p1=Instantiate(plant1preFab);
then anytime later, talk to "your" plant1 with things like p1.position=
. As a bonus, it also runs faster (not that speed matters in 99% of your code.)