Problem with destroying a gameobject
Hey I have an enemy that spawns shoots:
public GameObject projectile;
public float delay;
private Rigidbody2D rb2D;
private Rigidbody2D rocketInstance;
private float randomAngle;
// Use this for initialization
void Start ()
{
projectile = GameObject.Find ("Projectile");
//rb2D = projectile.GetComponent<Rigidbody2D>();
StartCoroutine (Shoots());
}
// Update is called once per frame
void Update ()
{
}
IEnumerator Shoots()
{
while (true)
{
yield return new WaitForSeconds(delay);
//GameObject clone = (GameObject) Instantiate(projectile, transform.position, Quaternion.identity);
//clone.rb2D.velocity = -transform.right * speedFactor;
Rigidbody2D projectileInstance = Instantiate(projectile, transform.position, Quaternion.Euler(new Vector3(0,0,Random.Range (-45f, 45f)))) as Rigidbody2D;
}
}
}
an a script attached to the projectiles that should destroy these:
{
public float destroyTime;
// Use this for initialization
void Start ()
{
Destroy (this.gameObject, destroyTime);
}
void OnTriggerEnter2d ()
{
Destroy(this.gameObject);
}
// Update is called once per frame
void Update ()
{
}
}
There is also a script attached to the projectiles to handle the speed:
public int moveSpeed = 100;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Translate (Vector3.left * Time.deltaTime * moveSpeed);
}
}
This works until the destroyscript starts to destroy the projectiles then I get the error message: MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
How can I handle this?
Thanks a lot!
Answer by OncaLupe · Nov 02, 2015 at 05:03 PM
projectile = GameObject.Find ("Projectile");
You're grabbing a reference to a live object in the scene and using that to spawn copies with the Instantiate method. Once that first object gets destroyed, Instantiate can no longer copy it and gives the error.
You should remove that line from the Start() method, drag the projectile to a Prefab folder in your assets, delete the projectile from the scene since it's now saved as a prefab, then drag that prefab from assets to the 'projectile' reference in the inspector of the enemy object.
Answer by rfuhrer · Nov 02, 2015 at 06:45 PM
Thank you very much OncaLupe! You made my day! I just could not find this even after some hours. Sometimes its hard to code if your in fact an artist! :-D
Your answer
Follow this Question
Related Questions
I need help about Basic Basketball Game 0 Answers
Instantiating GameObject loses some properties of the original GameObject 1 Answer
What is Casting in Unity ? 1 Answer
RPG instantiate problem 3 Answers
Random.range game object destroying itself before reaching destroy position.Please help. 1 Answer