2017-11-03 4 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); 
    } 
} 

너무 좋게 보이기 위해 너무 짧은 시간 후에 개체를 파괴하기 만하면됩니다. IEnumeratorOnTriggerEnter2D에 정의되어 있기 때문에 trig.gameObject에 액세스 할 수 없습니다. 이 값에 액세스 할 수있는 방법이 있습니까? 또한 OnTriggerEnter2D에 IEnumerator을 넣으려고했는데 작동하지 않았습니다. 친절한 초짜다른 함수에서 OnTriggerEnter2D 값에 액세스하는 방법?

답변

4

당신은 그렇게 할 필요가 없습니다. Destroy 함수는 Object가 소멸되기 전에 두 번째 매개 변수를 지연 시간으로 사용할 수 있습니다. 당신은 여전히이 작업을 수행하는 코 루틴을 사용하려면

Destroy(trig.gameObject, 1f); 

, 단순히 매개 변수는 다음 파괴 될 수있는 BowlDestroyTime 함수에 OnTriggerEnter2D 기능에서 게임 오브젝트를 통과으로 BowlDestroyTime 기능 GameObject을 할 수 있습니다.

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); 
} 
관련 문제