1、直接保存场景运行时的画面到指定路径。保存的画面为Game中所看到的所有,参数为保存图片的相对路径。
[MenuItem( "Tool/保存Game中界面为图片" )]
public static void CaptureScreen() {
ScreenCapture.CaptureScreenshot( "Assets/Art/截图.png" );
// 刷新Unity文件,使保存的截图文件立刻刷新到文件列表中
AssetDatabase.Refresh();
}
2、保存场景中指定相机渲染的画面,可以指定截图的大小,保存的路径。
/// <summary>
/// 保存截屏
/// </summary>
/// <param name="camera"> 渲染的相机 </param>
/// <param name="rect"> 位置,大小 </param>
/// <param name="fileName"> 保存的路径 </param>
public static void CaptureScreenByRT( Camera camera, Rect rect, string fileName ) {
// 创建一个RenderTexture对象
RenderTexture rt = new RenderTexture( ( int )rect.width, ( int )rect.height, 0 );
// 临时设置相关相机的targetTexture为rt, 并手动渲染相关相机
camera.targetTexture = rt;
camera.Render();
// 激活这个rt, 并从中中读取像素。
RenderTexture.active = rt;
Texture2D screenShot = new Texture2D( ( int )rect.width, ( int )rect.height, TextureFormat.RGB24, false );
// 注:这个时候,它是从RenderTexture.active中读取像素
screenShot.ReadPixels( rect, 0, 0 );
screenShot.Apply();
// 重置相关参数,以使用camera继续在屏幕上显示
camera.targetTexture = null;
RenderTexture.active = null;
GameObject.Destroy( rt );
// 最后将这些纹理数据,成一个png图片文件
byte[] bytes = screenShot.EncodeToPNG();
System.IO.File.WriteAllBytes( fileName, bytes );
// 提示窗口
EditorUtility.DisplayDialog( "提示: ", "保存截图成功!", "确定" );
}