Unity优化多选Toggle逻辑:实现智能筛选资产文件名方案
优化Unity Toggle筛选资产文件的冗余代码方案
问题解答
1. 用Toggle标签作为匹配关键字
通过自定义结构体将Toggle的显示标签(即目标扩展名)与勾选状态绑定,让Toggle的标签直接作为文件名匹配的关键字,彻底摆脱硬写字符串的冗余。
2. 适配多Toggle的通用方法
核心逻辑是先收集所有被勾选的扩展名,再对资产列表做统一过滤:仅保留扩展名不在勾选集合中的文件。这个逻辑不依赖Toggle的数量,新增Toggle只需在扩展名列表中添加项,无需修改筛选代码。
优化后的完整代码
using System.Collections.Generic; using System.Linq; using UnityEditor; using UnityEngine; class ShowAssetIds : EditorWindow { [MenuItem("Assets/Test")] static void ShowWindow() { ShowAssetIds window = (ShowAssetIds)GetWindow(typeof(ShowAssetIds)); window.Show(); } // 结构体绑定扩展名与Toggle状态 private struct ExtensionToggle { public string Extension; public bool IsEnabled; public ExtensionToggle(string extension, bool isEnabled) { Extension = extension; IsEnabled = isEnabled; } } // 扩展名Toggle列表,新增扩展名直接加项即可 private List<ExtensionToggle> extensionToggles = new List<ExtensionToggle> { new ExtensionToggle("tga", false), new ExtensionToggle("png", false), new ExtensionToggle("tif", false), new ExtensionToggle("exr", false) }; private List<string> assetList = new List<string> { "xxx.tga", "bbb.png", "ccc.tif", "qqq.exr" }; private void OnGUI() { if (GUILayout.Button("筛选资产")) { // 收集所有被勾选的扩展名 var checkedExtensions = extensionToggles .Where(t => t.IsEnabled) .Select(t => t.Extension) .ToList(); // 过滤资产:排除所有含勾选扩展名的文件 var filteredAssets = assetList .Where(asset => !checkedExtensions.Any(ext => asset.EndsWith($".{ext}", System.StringComparison.OrdinalIgnoreCase))) .ToList(); // 输出结果 foreach (var asset in filteredAssets) { Debug.Log(asset); } } // 批量绘制Toggle,新增项无需修改此处 for (int i = 0; i < extensionToggles.Count; i++) { var current = extensionToggles[i]; current.IsEnabled = EditorGUILayout.ToggleLeft(current.Extension.ToUpper(), current.IsEnabled); extensionToggles[i] = current; } } }
优化说明
- 结构化状态管理:
ExtensionToggle将扩展名与勾选状态打包,新增扩展名只需在初始化列表中添加一行,无需修改GUI或筛选逻辑。 - 通用筛选逻辑:借助LINQ快速收集勾选的扩展名,通过
Any方法统一判断文件是否属于被排除类型,支持任意数量的Toggle。 - 鲁棒性提升:使用
EndsWith结合大小写忽略匹配,避免因文件名大小写差异导致的筛选错误。 - 代码复用性:GUI绘制通过遍历列表实现,新增Toggle无需重复编写Toggle绘制代码。
内容的提问来源于stack exchange,提问作者Hammeee
相关产品推荐
相关产品推荐

