协程在 Unity 中不起作用

Coroutine doesn't work in Unity

我需要在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() 时,canvas 隐藏但既没有截图也没有文本日志。

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

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

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

你也可以这样做。

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);
    }