目录
BUG详情
使用CaptureScreenshotAsTexture方法时,出现了BUG。
CaptureScreenshot(L:0, B:0, W:1920, H:1080) requested a region that exceeds the active Render Target sized [W:1088, H:913].
CaptureScreenshotAsTexture() failed to generate texture! Was method called before the 'end of frame' state was reached?
出现BUG的代码:
public void SetPicture()
{
Texture2D s1 = UnityEngine.ScreenCapture.CaptureScreenshotAsTexture();
Sprite s = Sprite.Create(s1, new Rect(0, 0, s1.width, s1.height), Vector2.zero);
image.sprite = s;
}
解决方法
修改为协程,等待刷新后再截屏。
public void SetScren()
{
StartCoroutine(ScreenShotFile("2132"));
}
/// <summary>
/// UnityEngine自带截屏Api,只能截全屏
/// </summary>
/// <param name="fileName">文件名</param>
public IEnumerator ScreenShotFile(string fileName)
{
yield return new WaitForEndOfFrame();//等到帧结束,不然会报错
Texture2D tex = UnityEngine.ScreenCapture.CaptureScreenshotAsTexture();//截图返回Texture2D对象
Sprite s = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero);
image.sprite = s;
}
出错原因
上手册查了后,发现需要等待渲染结束后才能截屏,不然会报错。
要从此方法获得可靠的输出,必须确保在帧渲染结束后调用此方法,而不是在渲染过程中调用。确保这一点的一种简单方式是从一个在 WaitForEndOfFrame 上产生的协程调用此方法。如果在渲染过程中调用此方法,则会得到不可预测且未定义的结果。