协程在 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);
}
我需要在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);
}