Coroutine在Unity中不起作用

时间:2017-07-05 14:56:42

标签: c# unity3d coroutine

我需要在Unity中制作截图。我是通过下一个方式做到的:

public void Capture(){
    StartCoroutine(CaptureScreenshot());
}

private IEnumerator CaptureScreenshot(){
    GameObject canvas = GameObject.Find("Canvas");
    canvas.SetActive(false); // hide all buttons
    yield return new WaitForEndOfFrame();

    string timestamp = DateTime.Now.ToString("dd_MMMM_hh_mm_ss_tt");
    Application.CaptureScreenshot("screenshot" + timestamp + ".png");
    Debug.Log("Screenshot was captured.");
    yield return new WaitForEndOfFrame();

    canvas.SetActive(true); // restore all buttons
    yield return null;
}

当我调用Capture()时,画布会隐藏,但既没有截屏也没有文本日志。

这段代码有什么问题?谢谢你的回复。

2 个答案:

答案 0 :(得分:3)

因为当您执行canvas.SetActive(false);同时禁用脚本时,脚本正在画布中的对象上运行,因此阻止协程从yield return new WaitForEndOfFrame();继续。

将脚本移动到不在画布上的游戏对象,它应该可以解决问题。

答案 1 :(得分:-1)

你也可以这样做。

foreach(Transform t in GameObject.Find("Canvas").transform)
{
 if(transform.gameObject.name != t.gameObject.name)
 t.gameObject.SetActive(false);
}

请务必使用

重新启用它们
foreach(Transform t in GameObject.Find("Canvas").transform)
    {

     t.gameObject.SetActive(true);
    }