using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.IO; using UnityEngine.U2D; public class UILoader { readonly static string PREFAB_EXTERSION = ".prefab"; readonly static string SPRITE_EXTERSION = ".png"; readonly static string Spriteatlas_EXTERSION = ".spriteatlasv2"; public static GameObject LoadWindow(string name) { GameObject window = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var isPriority = PriorityWindowConfig.Get().priorityWindows.Contains(name); var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, isPriority ? ResourcesPath.UI_PRIORITYWINDOW_SUFFIX : ResourcesPath.UI_WINDOW_SUFFIX, "/", name, PREFAB_EXTERSION); window = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var isPriority = PriorityWindowConfig.Get().priorityWindows.Contains(name); var bundleName = isPriority ? StringUtility.Contact("ui/prioritywindow/", name) : "ui/window"; var assetInfo = new AssetInfo(bundleName, name); window = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (window == null) { DebugEx.LogErrorFormat("UILoader.LoadWindow() => 加载不到资源: {0}.", name); } return window; } public static void LoadWindowAsync(string _name, Action _callBack) { GameObject window = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var isPriority = PriorityWindowConfig.Get().priorityWindows.Contains(_name); var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, isPriority ? ResourcesPath.UI_PRIORITYWINDOW_SUFFIX : ResourcesPath.UI_WINDOW_SUFFIX, "/", _name, PREFAB_EXTERSION); window = UnityEditor.AssetDatabase.LoadAssetAtPath(path); if (_callBack != null) { _callBack(window != null, window); } #endif } else { var isPriority = PriorityWindowConfig.Get().priorityWindows.Contains(_name); var bundleName = isPriority ? StringUtility.Contact("ui/prioritywindow/", _name) : "ui/window"; var assetInfo = new AssetInfo(bundleName, _name); AssetBundleUtility.Instance.Co_LoadAsset(assetInfo, _callBack); } } public static void UnLoadWindowAsset(string _assetName) { if (!AssetSource.uiFromEditor) { var isPriority = PriorityWindowConfig.Get().priorityWindows.Contains(_assetName); var bundleName = isPriority ? StringUtility.Contact("ui/prioritywindow/", _assetName) : "ui/window"; AssetBundleUtility.Instance.UnloadAsset(bundleName, _assetName); } } public static void UnLoadPriorityWindow(string windowName) { if (!AssetSource.uiFromEditor) { var assetBundleName = StringUtility.Contact("ui/prioritywindow/", windowName.ToLower()); AssetBundleUtility.Instance.UnloadAssetBundle(assetBundleName, true, false); switch (windowName) { case "LoginWin": AssetBundleUtility.Instance.UnloadAssetBundle("ui/sprite/login", true, false); break; case "SelectRoleWin": case "CreateRoleWin": AssetBundleUtility.Instance.UnloadAssetBundle("ui/sprite/createrole", true, false); break; } } } public static GameObject LoadPrefab(string _name) { GameObject prefab = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, ResourcesPath.UI_PREFAB_SUFFIX, "/", _name, PREFAB_EXTERSION); prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var bundleName = ResourcesPath.UI_PREFAB_SUFFIX.ToLower(); var assetInfo = new AssetInfo(bundleName, _name); prefab = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (prefab == null) { DebugEx.LogErrorFormat("UILoader.LoadPrefab() => 加载不到资源: {0}.", _name); } return prefab; } public static void UnLoadPrefab(string _assetName) { if (!AssetSource.uiFromEditor) { AssetBundleUtility.Instance.UnloadAsset("ui/prefab", _assetName); } } public static Sprite LoadSprite(string _iconKey) { var iconConfig = IconConfig.Get(_iconKey); if (iconConfig == null) { return null; } return LoadSprite(iconConfig.folder, iconConfig.sprite); } public static Sprite LoadSprite(string _folder, string _file) { var folder = _folder; var file = _file; Sprite sprite = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var relativePath = folder; var rootPath = ResourcesPath.UI_SPRITE_SUFFIX; var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, rootPath, "/", relativePath, Spriteatlas_EXTERSION); var spriteAtlas = UnityEditor.AssetDatabase.LoadAssetAtPath(path); sprite = spriteAtlas.GetSprite(file); #endif } else { var bundleName = StringUtility.Contact("ui/sprite/", folder.ToLower()); //var assetInfo = new AssetInfo(bundleName, folder); //var spriteAtlas = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo, typeof(SpriteAtlas)) as SpriteAtlas; //sprite = spriteAtlas?.GetSprite(_file); var assetInfo = new AssetInfo(bundleName, file); sprite = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo, typeof(Sprite)) as Sprite; } if (sprite == null) { DebugEx.LogErrorFormat("UILoader.LoadSprite() => 加载不到资源: {0}.", file); } return sprite; } public static void UnLoadSprite(string _iconKey) { if (!AssetSource.uiFromEditor) { var iconConfig = IconConfig.Get(_iconKey); if (iconConfig != null) { var bundleName = StringUtility.Contact("ui/sprite/", iconConfig.folder.ToLower()); AssetBundleUtility.Instance.UnloadAsset(bundleName, iconConfig.sprite); } } } public static Font LoadFont(string _fontName) { Font font = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var rootPath = ResourcesPath.UI_FONT_SUFFIX; var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, rootPath, "/", _fontName, ".ttf"); font = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var assetInfo = new AssetInfo("ui/font", _fontName); font = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo, typeof(Font)) as Font; } if (font == null) { DebugEx.LogErrorFormat("UILoader.LoadFont() => 加载不到资源: {0}.", _fontName); } return font; } public static void UnLoadFont(string _fontName) { if (!AssetSource.uiFromEditor) { AssetBundleUtility.Instance.UnloadAsset("ui/font", _fontName); } } public static GameObject LoadTreasure(string folder, string name) { GameObject prefab = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, "UI/Treasure/", folder, "/", name, PREFAB_EXTERSION); prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var bundleName = StringUtility.Contact("ui/treasure/", folder).ToLower(); var assetInfo = new AssetInfo(bundleName, name); prefab = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (prefab == null) { DebugEx.LogErrorFormat("UILoader.LoadPrefab() => 加载不到资源: {0}.", name); } return prefab; } public static void UnLoadTreasure(string folder, string _assetName) { if (!AssetSource.uiFromEditor) { AssetBundleUtility.Instance.UnloadAsset(StringUtility.Contact("ui/treasure/", folder).ToLower(), _assetName); } } public static GameObject LoadFaqi(string pathName, string name) { GameObject prefab = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, //"UI/Treasure/", folder, "/", pathName, name, PREFAB_EXTERSION); prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var bundleName = pathName; //StringUtility.Contact("ui/treasure/", folder).ToLower(); var assetInfo = new AssetInfo(bundleName, name); prefab = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (prefab == null) { DebugEx.LogErrorFormat("UILoader.LoadFaqi() => 加载不到资源: {0}.", name); } return prefab; } public static GameObject LoadGodWeapon(string _name) { GameObject prefab = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, "UI/GodWeapon/", _name, PREFAB_EXTERSION); prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var bundleName = "ui/godweapon"; var assetInfo = new AssetInfo(bundleName, _name); prefab = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (prefab == null) { DebugEx.LogErrorFormat("UILoader.LoadGodWeapon() => 加载不到资源: {0}.", _name); } return prefab; } public static GameObject LoadBossShow(string _name) { GameObject prefab = null; if (AssetSource.uiFromEditor) { #if UNITY_EDITOR var path = StringUtility.Contact(ResourcesPath.ResourcesOutAssetPath, "UI/BossShow/", _name, PREFAB_EXTERSION); prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(path); #endif } else { var bundleName = "ui/bossshow"; var assetInfo = new AssetInfo(bundleName, _name); prefab = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo) as GameObject; } if (prefab == null) { DebugEx.LogErrorFormat("UILoader.LoadBossShow() => 加载不到资源: {0}.", _name); } return prefab; } }