Couroutine บนทริกเกอร์ Enter

ฉันกำลังเล่นเกมที่เหมือนกับเกมบอล และตอนนี้ฉันมีข้อสงสัยบางอย่าง ฉันต้องการเปิดใช้งานกิจกรรมหลังจากป้อนทริกเกอร์ ดังนั้นหลังจากที่ฉันป้อนทริกเกอร์ ฉันควรจะรอประมาณ 2 วินาทีแล้วจึงเปิดใช้งานกิจกรรม เหตุการณ์ก็เหมือนกับการเปลี่ยนกล้อง ผมจึงส่งต่อกล้องเป็นเท็จ และอีกอันเป็นจริง หลังจากนั้นผมต้องการรออีก 2 วินาทีแล้วย้อนกลับ สิ่งที่ผมต้องการคือสิ่งที่บางเกมต้องทำ เมื่อคุณกดปุ่มประตู เปิดขึ้น กล้องตัวอื่นจึงถูกเปิดใช้งานเพื่อดูประตูที่เปิดอยู่ จากนั้นกล้องจะกลับไปที่เครื่องเล่น

ฉันลองแล้ว

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;

        }
    }
}

ปัญหาของฉันคือ ฉันไม่รู้วิธีนำ Coroutine ไปใช้ในกรณีนี้ดีนัก ฉันรู้วิธีใช้งานในฟังก์ชันอัปเดต แต่ที่นี่รู้สึกแปลก ต้องการความช่วยเหลือ

ขอบคุณ


person Community    schedule 03.01.2017    source แหล่งที่มา


คำตอบ (1)


มีการถามคำถามที่คล้ายกันหลายครั้ง Coroutines นั้นไม่ซับซ้อนขนาดนั้น;)

 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
หมายเหตุเล็กๆ น้อยๆ : แนวทางปฏิบัติที่ดีคือสร้าง WaitForSeconds เพียงอันเดียวแล้วนำมาใช้ซ้ำ เนื่องจากการสร้างเป็นประจำต้องใช้ทรัพยากรบางส่วน - person Hellium; 03.01.2017
comment
สิ่งอื่นที่ฉันได้รับข้อยกเว้นการอ้างอิงเป็นโมฆะเมื่อฉันทำ 2 บรรทัดสุดท้าย ฉันคิดว่ามันเกี่ยวข้องกับ Camera.main.enabled - person ; 03.01.2017
comment
แน่นอนว่าเป็นเพราะคุณไม่มีกล้องในฉากที่มีแท็ก MainCamera ใช่หรือไม่ - person Hellium; 03.01.2017