2016-11-19 9 views
0

の時間の量の後に特定のゲームオブジェクトを破壊します。ゲームオブジェクトは、それに接続されている私のスクリプトを使って、特定のゲームオブジェクトとトリガイベントがあるとき、私は時間の経過後に特定のゲームオブジェクトを破壊します。は、私はちょっと今の私のスクリプトで立ち往生団結

だから私はこれに来た:

void OnTriggerEnter (Collider other) { 

if (other.gameObject.tag == "leaf1"){ 
    StartCoroutine (LeafDestruction()); 
    } 
} 

IEnumerator LeafDestruction(){ 

yield return new WaitForSeconds (5); 
Destroy (gameObject); 

} 

私はこのスクリプトを実行すると、それはそれに接続されているスクリプトを使ってゲームオブジェクトを破壊し、そしてないので、私はそれがnoobのミスだ知っているが、私は何かを欠場だと思います特定のgameObject(タグ付き)

私はそれを解決することができますか?

答えて

3

簡単な解決策はDestroy関数の第二パラメータを使用することです::

だから、あなたが何ができるか、それが本当に破棄されるべきであるとのゲームオブジェクトを渡し、あなたのコルーチンにパラメータを追加することです

if (other.gameObject.tag == "leaf1") 
     Destroy(other.gameObject, 5.0f) ; 
+0

ありがとう!それはうまく動作し、よりシンプルです。 –

2

基本的には、このスクリプトを実行しているgameObjectではなく、other.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); 
} 
+1

ありがとうございます!それはHelliumの答えのようにも働く。 –

2

あなたは、オブジェクトの代わりに、葉を破壊しました。ゲームオブジェクトは、このスクリプトコンポーネントが接続されているゲームオブジェクトである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); 
} 
+0

あなたのソリューションは、他のもののようにも動作します、ありがとう:) –

関連する問題