我需要在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()
时,画布会隐藏,但既没有截屏也没有文本日志。
这段代码有什么问题?谢谢你的回复。
答案 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);
}