关于Unity3D截图并保存任意目录的问题

2015年03月15日 18:29 1 点赞 0 评论 更新于 2025-11-21 17:15

在游戏或软件的开发需求中,经常会用到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时没有实时编译造成的。可以尝试构建一个客户端,构建完成后错误通常会消失。

作者信息

boke

boke

共发布了 3994 篇文章