Couroutine di TriggerEnter

Saya sedang mengerjakan sebuah game yang seperti permainan bola, dan sekarang saya ragu, saya ingin mengaktifkan suatu acara setelah memasukkan pemicu, jadi setelah saya memasukkan pemicu saya harus menunggu sekitar 2 detik dan kemudian mengaktifkan acara tersebut, acaranya seperti mengganti kamera jadi saya meneruskan kamera ke salah dan yang lainnya ke benar, setelah itu saya ingin menunggu lebih dari 2 detik dan kembali, yang saya inginkan adalah apa yang harus dilakukan beberapa permainan, ketika Anda menekan tombol sebuah pintu terbuka, sehingga kamera lain diaktifkan untuk melihat pintu terbuka dan kemudian kembali ke pemain.

Saya mencobanya

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;

        }
    }
}

Masalah saya adalah saya tidak tahu betul bagaimana mengimplementasikan coroutine dalam kasus ini, saya tahu bagaimana melakukannya pada fungsi pembaruan, tapi ini terasa aneh, butuh bantuan tolong.

Terima kasih


person Community    schedule 03.01.2017    source sumber


Jawaban (1)


Pertanyaan serupa telah ditanyakan beberapa kali. Coroutine tidak terlalu rumit ;)

 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;
}
person Hellium    schedule 03.01.2017
comment
Catatan kecil : Merupakan praktik yang baik untuk membuat hanya satu WaitForSeconds dan menggunakannya kembali karena membuatnya secara rutin memerlukan sejumlah sumber daya. - person Hellium; 03.01.2017
comment
hal lain saya mendapatkan pengecualian nullreference ketika saya melakukan 2 baris terakhir, saya pikir itu ada hubungannya dengan Camera.main.enabled, - person ; 03.01.2017
comment
Tentunya karena Anda tidak memiliki kamera di adegan Anda dengan tag MainCamera? - person Hellium; 03.01.2017