工具杂谈 #1 Unity 多选文件对话框

本文探讨了在Unity中实现多选文件对话框的三种方法:Windows原生接口、Windows.Forms窗体接口和Python实现。由于Win32原生接口返回父文件夹而非文件列表,被放弃;Windows.Forms接口依赖于dll,不适合大型项目;Python脚本通过tkinter库实现,避免引入新dll,但需要处理命令行参数和输出。最终,文章提供了使用Python实现的完整仓库链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

Unity 打开文件对话框的接口,如 EditorUtility.OpenFilePanelEditorUtility.OpenFilePanelWithFilters,它们都有一个缺点,就是不支持多选文件。但是实际开发中会遇到需要多选文件的需求,这时候就得自行开发接口了。这时候就有同学要问了:你选择一个文件夹不就可以了吗?试想,若一个文件夹下有 100 个文件,我只想一次性选择其中 10 个文件,选整个文件夹肯定是不行的,我又不想打开 10 次对话框——这就是需求背景。

资料搜集

要做一个新的需求,第一步肯定是搜集现有资料,看看有无前人踩过坑甚至实现了的。经过一番搜索,我找到了三个可能的方向:① 直接调用 Windows 的原生接口;② 调用 Windows.Forms 的接口;③ 通过其他脚本语言实现。

方案详解

方法一:Windows 原生接口

Win32 原生接口中有个 GetOpenFileName,支持多选文件,如何在 Unity C# 中使用该接口我也找到了一篇博客,写的非常详细:【Unity编辑器开发】工具开发之Windows单选或多选文件踩坑记录 - 陌冉 - 博客园 (cnblogs.com)

大致思路就是构造一个和 Win32 中某个结构体字段以及布局完全一致的数据结构,用 DllImport 属性引入 Comdlg32.dll(该 dll 在目录 C:/Windows/System32 文件夹下)的 GetOpenFileName方法。

但是这个接口有个最大的坑点就是如果你选择了多个文件,它并不会返回这些文件的列表,而是返回它们的父文件夹😅。官方文档写的清清楚楚:

Microsoft-api

文档传送门:OPENFILENAMEA (commdlg.h) - Win32 apps | Microsoft Docs

无奈只能放弃该方法😕。

方法二:Windows.Forms 窗体接口

既然 win32 原生的行不通,那么就找其他的 dll。Windows

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值