Couroutine onTriggerEnter

时间:2017-01-03 07:52:26

标签: c# unity3d unity5

我正在开发一款类似于滚球游戏的游戏,现在我有些疑惑,我想在输入触发后激活一个事件,所以在我输入触发后我应该等待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;

        }
    }
}

我的问题是我不太清楚如何在这种情况下实现协同程序,我知道如何在更新函数上执行它,但是这里感觉很奇怪,需要一些帮助。

由于

1 个答案:

答案 0 :(得分: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;
}