diff --git a/Assets/YooAsset/Editor/EditorHelper.cs b/Assets/YooAsset/Editor/EditorHelper.cs index afe7d17..08b3b4a 100644 --- a/Assets/YooAsset/Editor/EditorHelper.cs +++ b/Assets/YooAsset/Editor/EditorHelper.cs @@ -10,6 +10,7 @@ namespace YooAsset.Editor #if UNITY_2019_4_OR_NEWER private readonly static Dictionary _uxmlDic = new Dictionary(); + /* static EditorHelper() { // 资源包收集 @@ -51,6 +52,46 @@ namespace YooAsset.Editor throw new System.Exception($"Invalid YooAsset window type : {windowType}"); } } + */ + + /// + /// 加载窗口的布局文件 + /// + public static UnityEngine.UIElements.VisualTreeAsset LoadWindowUXML() where TWindow : class + { + var windowType = typeof(TWindow); + + // 缓存里查询并加载 + if (_uxmlDic.TryGetValue(windowType, out string uxmlGUID)) + { + string assetPath = AssetDatabase.GUIDToAssetPath(uxmlGUID); + if (string.IsNullOrEmpty(assetPath)) + { + _uxmlDic.Clear(); + throw new System.Exception($"Invalid UXML GUID : {uxmlGUID} ! Please close the window and open it again !"); + } + var treeAsset = AssetDatabase.LoadAssetAtPath(assetPath); + return treeAsset; + } + + // 全局搜索并加载 + string[] guids = AssetDatabase.FindAssets(windowType.Name); + if (guids.Length == 0) + throw new System.Exception($"Not found any assets : {windowType.Name}"); + + foreach (string assetGUID in guids) + { + string assetPath = AssetDatabase.GUIDToAssetPath(assetGUID); + var assetType = AssetDatabase.GetMainAssetTypeAtPath(assetPath); + if (assetType == typeof(UnityEngine.UIElements.VisualTreeAsset)) + { + _uxmlDic.Add(windowType, assetGUID); + var treeAsset = AssetDatabase.LoadAssetAtPath(assetPath); + return treeAsset; + } + } + throw new System.Exception($"Not found UXML file : {windowType.Name}"); + } #endif ///