我正在尝试创建一些截图,但ScreenCapture.CaptureScreenshot
实际上捕获了整个编辑器,而不仅仅是游戏视图。
public class ScreenShotTaker : MonoBehaviour
{
public KeyCode takeScreenshotKey = KeyCode.S;
public int screenshotCount = 0;
private void Update()
{
if (Input.GetKeyDown(takeScreenshotKey))
{
ScreenCapture.CaptureScreenshot("Screenshots/"
+ "_" + screenshotCount + "_"+ Screen.width + "X" + Screen.height + "" + ".png");
Debug.Log("Screenshot taken.");
}
}
}
可能是什么问题?如何拍摄体面的游戏视图,仅包含UI的屏幕截图?
注意,用户界面的东西,我发现其他在线方法可以截取屏幕截图(使用RenderTextures
),但这些方法不包含用户界面。在我的另一个“真实”项目中我也有UI,我刚打开这个测试项目,看看屏幕截图问题是否仍然存在。
答案 0 :(得分:2)
这是一个错误,我建议你暂时远离它,直到ScreenCapture.CaptureScreenshot
足够成熟。此功能已在Unity 2017.2 beta中添加,因此现在是从编辑器提交错误报告的正确时间。更糟糕的是,它只会在我的计算机上保存黑白图像。
至于截图,还有其他方法可以在没有RenderTextures的情况下执行此操作,也会在屏幕截图中包含UI。
您可以使用Texture2D.ReadPixels
从屏幕上读取像素,然后使用File.WriteAllBytes
保存。
public KeyCode takeScreenshotKey = KeyCode.S;
public int screenshotCount = 0;
private void Update()
{
if (Input.GetKeyDown(takeScreenshotKey))
{
StartCoroutine(captureScreenshot());
}
}
IEnumerator captureScreenshot()
{
yield return new WaitForEndOfFrame();
string path = "Screenshots/"
+ "_" + screenshotCount + "_" + Screen.width + "X" + Screen.height + "" + ".png";
Texture2D screenImage = new Texture2D(Screen.width, Screen.height);
//Get Image from screen
screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
screenImage.Apply();
//Convert to png
byte[] imageBytes = screenImage.EncodeToPNG();
//Save image to file
System.IO.File.WriteAllBytes(path, imageBytes);
}