在 Unity 项目中使用 OpenFileDialog 实现选择文件功能

开发阶段用的是 UnityEditor.EditorUtility.OpenFilePanel() 函数,简单易用。但是如其名所示,UnityEditor 只在 Unity 编辑器内可见,尝试 build 出 Windows 下 standalone 包时会报编译错误。

解决办法是用 mono 库下的相应功能实现打开文件。

  1. 在 Unity 安装根目录的 \Editor\Data\Mono\lib\mono\2.0\ 路径下找到并复制 System.Windows.Forms.dll
  2. 粘贴 dll 文件到 Unity 项目的 Assets\Plugins\ 目录
  3. PlayerSettings 中 Api Compatibility Level 选项值从默认的 .NET Standard 2.0 调整为 .NET 4.x

此时,dll 在 Unity 项目中变为可见,可以在脚本文件中使用 dll 中任意功能了。

选择文件对话框通过 System.Windows.Forms.OpenFileDialog 类实现,一个典型用法如下:

1
2
3
4
5
6
7
8
System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog();
ofd.Filter = "Video Files(*.mp4;*.flv)|*.mp4;*.flv";
ofd.RestoreDirectory = true;
if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK)
{
return; // user clicked cancel.
}
var filePath = ofd.FileName; //filePath holds the file's full path.

具体用例参考我的 XOPlayer项目

issues:

  1. mono 实现的 OpenFileDialog 太丑了……是非基于宿主系统原生实现的。我用的 Unity 2018.4.14f1 提供的是 mono 2.0 版本,不知是否跟 mono 版本过旧有关。

评论