[英]destroy a specific gameobject after an amount of time in unity
我现在还坚持使用我的脚本。 当带有我的脚本的gameObject带有特定gameObject的触发事件时,我想在一段时间后销毁特定gameObject。
所以我来到这里:
void OnTriggerEnter ( Collider other) {
if (other.gameObject.tag == "leaf1"){
StartCoroutine (LeafDestruction ());
}
}
IEnumerator LeafDestruction(){
yield return new WaitForSeconds (5);
Destroy (gameObject);
}
我知道这是一个菜鸟错误,但是我想我错过了一些东西,因为当我运行此脚本时,它会破坏附带有脚本的gameObject,而不是特定的gameObject(with tags)。
我该如何解决?
一个更简单的解决方案是使用Destroy函数的第二个参数:
if (other.gameObject.tag == "leaf1")
Destroy( other.gameObject, 5.0f ) ;
基本上,您需要告诉协程,它应该销毁other.gameObject
而不是销毁运行此脚本的gameObject。
因此,您可以做的是在协程中添加一个参数,并传入gameObject使其真正被销毁:
void OnTriggerEnter ( Collider other) {
if (other.gameObject.tag == "leaf1")
{
IEnumerator coroutine = LeafDestruction(other.gameObject);
StartCoroutine (coroutine);
}
}
IEnumerator LeafDestruction(GameObject toDestroy){
yield return new WaitForSeconds (5);
Destroy (toDestroy);
}
您破坏了对象而不是叶子。 游戏对象是一个别名this.gameObject
,这是本脚本组件被安装到游戏对象。 注意MonoBehaviour
从Behaviour
继承,而Behaviour
从Component
继承。
GameObject leafObject;
void OnTriggerEnter ( Collider other) {
if (other.gameObject.tag == "leaf1"){
leafObject = other.gameObject;
StartCoroutine (LeafDestruction ());
}
}
IEnumerator LeafDestruction(){
yield return new WaitForSeconds (5);
Destroy (leafObject);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.