关于Unity3D截图并保存任意目录的问题
在游戏或软件的开发需求中,经常会用到Unity 3D截图并保存至任意目录的功能。下面将详细分享该功能的实现方法。
1. 前提条件
此方法仅限于PC和Mac Standalone平台。
2. 准备工作
2.1 找到 System.Windows.Forms.dll
在Unity的安装目录中找到 System.Windows.Forms.dll 文件。例如,其路径可能为 E:\Program Files (x86)\Unity\Editor\Data\Mono\lib\mono\2.0。
2.2 设置.NET 2.0集
Unity默认使用的是.NET 2.0 Subset。需要在 Edit -> Project Settings -> Player -> OtherSettings 中进行修改,将其设置为完整的.NET 2.0。
3. 具体实现
3.1 复制文件
任意打开一个Unity项目,在项目中新建一个 Plugins 文件夹,然后将找到的 System.Windows.Forms.dll 文件复制到该文件夹中。
3.2 创建并挂载脚本
新建一个名为 Screenshot.cs 的脚本,并将其拖拽到场景中的任意物体上。
3.3 运行截图
运行项目后,按下 Z 键即可进行截图并保存。
4. Screenshot.cs 脚本代码
using UnityEngine;
using System.Windows.Forms;
public class Screenshot : MonoBehaviour {
void Update() {
if (Input.GetKeyDown(KeyCode.Z)) {
SaveFileDialog saveLog = new SaveFileDialog();
saveLog.InitialDirectory = "c:\\";
saveLog.Filter = "Image Files(*.JPG;*.BMP;*.PNG)|*.JPG;*.BMP;*.PNG|All files (*.*)|*.*";
DialogResult result = saveLog.ShowDialog();
if (result == DialogResult.OK) {
string path = saveLog.FileName;
UnityEngine.Application.CaptureScreenshot(path);
}
}
}
}
5. 注意事项
5.1 API查阅
代码中所有的API均可在MSDN上查阅,具体链接为:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.savefiledialog.aspx
5.2 替代方法
EditorUtility.SaveFilePanel 也可以实现相同的功能,但该方法必须在Unity编辑器下才能使用。
6. 关于报错处理
6.1 编辑器弹窗报错
在编辑器中运行时,如果出现弹窗,直接确定忽略即可。当项目发布成桌面客户端后,该弹窗将不会出现。
6.2 其他报错
其他报错有可能是在切换到.NET 2.0 Subset时没有实时编译造成的。可以尝试构建一个客户端,构建完成后错误通常会消失。