在 Unity 项目中使用 OpenFileDialog 实现选择文件功能
开发阶段用的是 UnityEditor.EditorUtility.OpenFilePanel()
函数,简单易用。但是如其名所示,UnityEditor
只在 Unity 编辑器内可见,尝试 build 出 Windows 下 standalone 包时会报编译错误。
解决办法是用 mono 库下的相应功能实现打开文件。
- 在 Unity 安装根目录的 \Editor\Data\Mono\lib\mono\2.0\ 路径下找到并复制 System.Windows.Forms.dll
- 粘贴 dll 文件到 Unity 项目的 Assets\Plugins\ 目录
- PlayerSettings 中 Api Compatibility Level 选项值从默认的 .NET Standard 2.0 调整为 .NET 4.x
此时,dll 在 Unity 项目中变为可见,可以在脚本文件中使用 dll 中任意功能了。
选择文件对话框通过 System.Windows.Forms.OpenFileDialog
类实现,一个典型用法如下:
1 | System.Windows.Forms.OpenFileDialog ofd = new System.Windows.Forms.OpenFileDialog(); |
具体用例参考我的 XOPlayer项目
issues:
- mono 实现的 OpenFileDialog 太丑了……是非基于宿主系统原生实现的。我用的 Unity 2018.4.14f1 提供的是 mono 2.0 版本,不知是否跟 mono 版本过旧有关。