繁体   English   中英

团结一致的时间后销毁特定的游戏对象

[英]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 ,这是本脚本组件被安装到游戏对象。 注意MonoBehaviourBehaviour继承,而BehaviourComponent继承。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM