2017-11-03 1 views
3
using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class RedHP : MonoBehaviour 
{ 

    public float HP = 5; 
    public GameObject BlueWon; 
    public GameObject Restart; 

    void OnTriggerEnter2D(Collider2D trig) 
    { 
     if (trig.gameObject.tag == "ThrowableBlue") 
     { 
      StartCoroutine(BowlDestroyTime()); 
      HP--; 
      if (HP <= 0) 
      { 
       BlueWon.SetActive(true); 
       Restart.SetActive(true); 
       PlayerBlueController.canMove = false; 
       PlayerBlueController.canFire = false; 
      } 
     } 
    } 

    IEnumerator BowlDestroyTime() 
    { 
     yield return new WaitForSeconds(1); 
     Destroy(trig.gameObject); 
    } 
} 

Ich möchte einfach mein Objekt nach zu wenig Zeit zerstören, um es besser aussehen zu lassen. In IEnumerator kann ich trig.gameObject nicht zugreifen, weil es in OnTriggerEnter2D definiert ist. Gibt es eine Möglichkeit, auf diesen Wert zuzugreifen? Ich habe auch versucht, IEnumerator in OnTriggerEnter2D setzen, es hat auch nicht funktioniert. Ein bisschen NeulingWie kann man in einer anderen Funktion auf einen Wert von OnTriggerEnter2D zugreifen?

Antwort

4

Sie müssen das nicht tun. Die Funktion Destroy kann einen zweiten Parameter als Verzögerungszeit vor der Zerstörung des Objekts annehmen.

Destroy(trig.gameObject, 1f); 

Wenn Sie noch Koroutine verwenden möchten, dies zu tun, einfach machen die BowlDestroyTime Funktion GameObject nehmen als Parameter dann die Gameobject aus der OnTriggerEnter2D Funktion zur Funktion zerstört werden BowlDestroyTime passieren.

void OnTriggerEnter2D(Collider2D trig) 
{ 
    if (trig.gameObject.tag == "ThrowableBlue") 
    { 
     StartCoroutine(BowlDestroyTime(trig.gameObject)); 
     HP--; 
     if (HP <= 0) 
     { 
      BlueWon.SetActive(true); 
      Restart.SetActive(true); 
      PlayerBlueController.canMove = false; 
      PlayerBlueController.canFire = false; 
     } 
    } 
} 

IEnumerator BowlDestroyTime(GameObject tartgetObj) 
{ 
    yield return new WaitForSeconds(1); 
    Destroy(tartgetObj); 
} 
Verwandte Themen