2017-01-03 2 views
0

Я работаю над игрой, похожей на игру с мячом, и теперь у меня есть некоторые сомнения, я хочу активировать событие после ввода триггера, поэтому после того, как я вхожу в свой триггер, я должен ждать как 2 секунды и затем активируйте событие, событие похоже на изменение камер, поэтому я передаю камеру в false, а другой - в true, после чего я хочу подождать еще 2 секунды и вернуться назад, что я хочу, это то, что некоторые игры должны, когда вы нажмите кнопку, откроется дверь, поэтому другая камера активирована, чтобы открыть дверь, а затем она возвращается к плееру.Couroutine onTriggerEnter

Я попытался это

public class button : MonoBehaviour { 

    public GameObject elevator; 
    private Camera second; 
    void Start(){ 
     elevator = GameObject.Find("Elevator"); 
     second = GameObject.Find("EventCamera").GetComponent<Camera>(); 
    } 


    IEnumerator WaitForSecs() 
    { 
     yield return new WaitForSeconds(2); 
    } 

    void OnTriggerEnter(Collider c) 
    { 
     if (c.gameObject.tag == "Player") { 
      transform.localPosition = new Vector3(transform.localPosition.x, 0.08f, transform.localPosition.z); 
      transform.GetComponent<Renderer>().material.color = Color.green; 
      Camera.main.enabled = false; 
      second.enabled = true; 
      elevator.GetComponent<PingPong>().enabled = true; 
      Camera.main.enabled = true; 
      second.enabled = false; 

     } 
    } 
} 

Моя проблема заключается в том, что я не очень хорошо знаю, как реализовать сопрограмму в этом случае, я знаю, как это сделать на функцию обновления, но здесь чувствует странно, нужна помощь.

Thanks

ответ

2

С подобными вопросами задавали несколько раз. Корутины не так сложны;)

void OnTriggerEnter(Collider c) 
{ 
    if (c.gameObject.tag == "Player") { 
     transform.localPosition = new Vector3(transform.localPosition.x, 0.08f, transform.localPosition.z); 
     GetComponent<Renderer>().material.color = Color.green; 
     StartCoroutine(ShowDoor()) ; 
    } 
} 

IEnumerator ShowDoor() 
{ 
    yield return new WaitForSeconds(2); 
    Camera.main.enabled = false; 
    second.enabled = true; 
    elevator.GetComponent<PingPong>().enabled = true; 
    yield return new WaitForSeconds(2); 
    Camera.main.enabled = true; 
    second.enabled = false; 
} 
+0

Небольшая заметка: Хорошая практика заключается в создании только одного 'WaitForSeconds' и повторного использования, потому что для его создания регулярно требуются ресурсы. – Hellium

+0

hmmm Как я могу его повторно использовать? im новичок хочет учиться: D –

+0

Другая вещь, я получаю nullreferenceexception, когда я делаю последние 2 строки, я думаю, что это имеет какое-то отношение к Camera.main.enabled, –

Смежные вопросы