| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | 
							- #if UNITY_2019_4_OR_NEWER
 
- using System.Collections;
 
- using System.Collections.Generic;
 
- using UnityEditor;
 
- using UnityEngine;
 
- using UnityEditor.UIElements;
 
- using UnityEngine.UIElements;
 
- namespace YooAsset.Editor
 
- {
 
- 	public class UxmlLoader
 
- 	{
 
- 		private readonly static Dictionary<System.Type, string> _uxmlDic = new Dictionary<System.Type, string>();
 
- 		/// <summary>
 
- 		/// 加载窗口的布局文件
 
- 		/// </summary>
 
- 		public static UnityEngine.UIElements.VisualTreeAsset LoadWindowUXML<TWindow>() 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<UnityEngine.UIElements.VisualTreeAsset>(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<UnityEngine.UIElements.VisualTreeAsset>(assetPath);
 
- 					return treeAsset;
 
- 				}
 
- 			}
 
- 			throw new System.Exception($"Not found UXML file : {windowType.Name}");
 
- 		}
 
- 	}
 
- }
 
- #endif
 
 
  |