Hello, I’m instantiating an object called bullet from a different script. It’s a very simple script and I’m trying to destroy the current instantiated bullet after 5 seconds. Here is what I’ve come up with so far:
Destroy(gameObject, 5);
However, when this runs every bullet copied is destroyed and I can no longer instantiate that object any longer.
How can I destroy only the current gameobject instead of all instances of that instantiated gameobject?
Alternatively,you can make a stack of your bullets and perform more complex functions.
Hope this helps
Edit:The complete scripts will look like these:-
The creator script(Attach on some permanent Gameobject like camer or plane)
using UnityEngine;
using System.Collections;
public class creator : MonoBehaviour {
public GameObject cube , spawner;
// Use this for initialization
void Start () {
InvokeRepeating("CreatePrefab", 1.0f, 1.0f);
}
void CreatePrefab() {
GameObject newCube = GameObject.Instantiate (cube);
newCube.transform.position = spawner.transform.position;
}
// Update is called once per frame
}
The destroyer script:
(Attach on the bullet)
using UnityEngine;
using System.Collections;
public class destroyer : MonoBehaviour {
// Use this for initialization
void Start () {
Invoke("destroy", 5.0f);
}
void destroy () {
Destroy (gameObject);
}
}
A simple script attached on the bullet prefab can do that
IEnumerator Start () {
yield return new WaitForSeconds(5f);
Destroy(gameObject);
}
All you have to do is replace the start fuction of the bullet with the above code or you can create a fuction
like this and call it from start function:
void Start(){
StartCoroutine(DestroySelf());
}
IEnumarator DestroySelf(){
yield return new WaitForSeconds(5f);
Destroy(gameObject);
}
Make sure the above code is attached on the bullet prefab and not on the object you use to instantiate the bullets. Hope that helps.