Unity 截图
程序员文章站
2022-07-13 22:06:33
...
截图之后 尽量不要调用 AssetDatabase.Refresh(); 不然我的 Opencv 会出问题(有时间再去看看是啥问题)
1. 只能截全屏 , 有UI,方便的是 它会帮你自动保存, 也能直接截图成 Texture2D 方便使用
ScreenCapture.CaptureScreenshot (Application.streamingAssetsPath + "/Screenshots/" + CurrentPage + ".png");
2. 对相机截图 有UI, 但是我在截图之后调用 AssetDatabase.Refresh(); 刷新文件夹的时候,使用 Opencv 的时候会出问题
转载自:
https://blog.csdn.net/inlet511/article/details/46829433
/// <summary>
/// 对相机截图。
/// </summary>
Texture2D CaptureCamera(Camera camera, Rect rect,string indexName)
{
// 创建一个RenderTexture对象
RenderTexture rt = new RenderTexture((int)rect.width, (int)rect.height,0);
// 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机
camera.targetTexture = rt;
camera.Render();
//ps: --- 如果这样加上第二个相机,可以实现只截图某几个指定的相机一起看到的图像。
//ps: camera2.targetTexture = rt;
//ps: camera2.Render();
//ps: -------------------------------------------------------------------
// **这个rt, 并从中中读取像素。
RenderTexture.active = rt;
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
screenShot.ReadPixels(rect, 0, 0);// 注:这个时候,它是从RenderTexture.active中读取像素
screenShot.Apply();
//// 重置相关参数,以使用camera继续在屏幕上显示
camera.targetTexture = null;
////ps: camera2.targetTexture = null;
//RenderTexture.active = null; // JC: added to avoid errors
//GameObject.Destroy(rt);
// 最后将这些纹理数据,成一个png图片文件
byte[] bytes = screenShot.EncodeToPNG();
string filename = Application.streamingAssetsPath + "/Screenshots/" + indexName + ".png";
System.IO.File.WriteAllBytes(filename, bytes);
Debug.Log(string.Format("截屏了一张照片: {0}", filename));
//#if UNITY_EDITOR
// AssetDatabase.Refresh();
//#endif
return screenShot;
}
3. 没有 UI
/// <summary>
/// Captures the screenshot2.
/// </summary>
/// <returns>The screenshot2.</returns>
/// <param name="rect">Rect.截图的区域,左下角为o点</param>
public Texture2D CaptureScreenshot(Rect rect, string indexName)
{
// 先创建一个的空纹理,大小可根据实现需要来设置
Texture2D screenShot = new Texture2D((int)rect.width, (int)rect.height, TextureFormat.RGB24, false);
// 读取屏幕像素信息并存储为纹理数据,
screenShot.ReadPixels(rect, 0, 0);
screenShot.Apply();
// 然后将这些纹理数据,成一个png图片文件
byte[] bytes = screenShot.EncodeToPNG();
string filename = Application.streamingAssetsPath + "/Screenshots/" + indexName + ".png";
System.IO.File.WriteAllBytes(filename, bytes);
Debug.Log(string.Format("截屏了一张图片: {0}", filename));
// 最后,我返回这个Texture2d对象,这样我们直接,所这个截图图示在游戏中,当然这个根据自己的需求的。
return screenShot;
}
上一篇: Unity API 解析(二) Quaternion类 四元素
下一篇: 最长回文子串