|  |  |  | 
|---|
|  |  |  | using UnityEngine; | 
|---|
|  |  |  | using System.Collections; | 
|---|
|  |  |  | using UnityEngine; | 
|---|
|  |  |  | using System.Collections.Generic; | 
|---|
|  |  |  | using Cysharp.Threading.Tasks; | 
|---|
|  |  |  | using System; | 
|---|
|  |  |  | using UnityEngine.U2D; | 
|---|
|  |  |  | using LitJson; | 
|---|
|  |  |  | using System.IO; | 
|---|
|  |  |  | using UnityEngine.Networking; | 
|---|
|  |  |  | using UnityEngine.Video; | 
|---|
|  |  |  | using Spine.Unity; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | #if UNITY_EDITOR | 
|---|
|  |  |  | 
|---|
|  |  |  | {typeof(Material), "mat"}, | 
|---|
|  |  |  | {typeof(VideoClip), "mp4"}, | 
|---|
|  |  |  | {typeof(SpriteAtlas), "spriteatlasv2"}, | 
|---|
|  |  |  | {typeof(SkeletonDataAsset), "asset"}, | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | public T LoadAsset<T> (string directory, string name) where T : UnityEngine.Object | 
|---|
|  |  |  | { | 
|---|
|  |  |  | T asset = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //  特殊处理 因为有一层图集的关系 directory要传入的应该是atlas的名字 | 
|---|
|  |  |  | if (typeof(T) == typeof(Sprite)) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | T asset = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))).Replace("//", "/"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (AssetSource.uiFromEditor) | 
|---|
|  |  |  | var path = ($"Assets/ResourcesOut/{directory}/{name}" + GetExtension(typeof(T))).Replace("//", "/").Trim().Replace("\\", "/"); | 
|---|
|  |  |  | if (!AssetSource.isUseAssetBundle) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #if UNITY_EDITOR | 
|---|
|  |  |  | asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (asset == null) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | Debug.LogErrorFormat("LoadAsset() => 加载不到资源: {0}.", name); | 
|---|
|  |  |  | Debug.LogErrorFormat("LoadAsset() => 加载不到资源: {0}", path); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return asset; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public string[] LoadConfig(string name) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | string path = string.Empty; | 
|---|
|  |  |  | #if UNITY_EDITOR | 
|---|
|  |  |  | if (!AssetSource.isUseAssetBundle) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | path = ResourcesPath.CONFIG_FODLER + "/" + name + ".txt"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | else | 
|---|
|  |  |  | #endif | 
|---|
|  |  |  | { | 
|---|
|  |  |  | path = AssetVersionUtility.GetAssetFilePath($"Config/{name}.txt"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return File.ReadAllLines(path); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private Sprite LoadSprite(string atlasName, string spriteName) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #if !UNITY_EDITOR | 
|---|
|  |  |  | SpriteAtlas atlas = LoadAsset<SpriteAtlas>("Sprite", atlasName); | 
|---|
|  |  |  | SpriteAtlas atlas = LoadAsset<SpriteAtlas>("Sprite", atlasName.Replace("Sprite/", "")); | 
|---|
|  |  |  | return atlas.GetSprite(spriteName); | 
|---|
|  |  |  | #else | 
|---|
|  |  |  | //  编辑器下可以直接加载没啥问题 | 
|---|
|  |  |  | return LoadAssetInternal<Sprite>("Sprite/" + atlasName, spriteName); | 
|---|
|  |  |  | return ResManager.Instance.LoadAssetInternal<Sprite>(atlasName, spriteName); | 
|---|
|  |  |  | #endif | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | private void LoadSpriteAsync<T>(string atlasName, string spriteName, Action<bool, UnityEngine.Object> callBack) where T : UnityEngine.Object | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #if !UNITY_EDITOR | 
|---|
|  |  |  | LoadAssetAsync<SpriteAtlas>("Sprite", atlasName, (isLoaded, atlas) => { | 
|---|
|  |  |  | LoadAssetAsync<SpriteAtlas>(atlasName, spriteName, (isLoaded, atlas) => { | 
|---|
|  |  |  | if (isLoaded) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | callBack?.Invoke(isLoaded, atlas.GetSprite(spriteName)); | 
|---|
|  |  |  | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | #else | 
|---|
|  |  |  | //  编辑器下可以直接加载没啥问题 | 
|---|
|  |  |  | LoadAssetAsyncInternal<T>("Sprite/" + atlasName, spriteName, callBack); | 
|---|
|  |  |  | LoadAssetAsyncInternal<T>(atlasName, spriteName, callBack); | 
|---|
|  |  |  | #endif | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | { | 
|---|
|  |  |  | var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))).Replace("//", "/"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (AssetSource.uiFromEditor) | 
|---|
|  |  |  | if (!AssetSource.isUseAssetBundle) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | #if UNITY_EDITOR | 
|---|
|  |  |  | var asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void UnloadAsset(string assetBundleName, string assetName) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (AssetSource.uiFromEditor) | 
|---|
|  |  |  | if (!AssetSource.isUseAssetBundle) | 
|---|
|  |  |  | return; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AssetBundleUtility.Instance.UnloadAsset(assetBundleName, assetName); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | public void UnloadAssetBundle(string assetBundleName, bool unloadAllLoadedObjects, bool includeDependenice) | 
|---|
|  |  |  | { | 
|---|
|  |  |  | if (AssetSource.uiFromEditor) | 
|---|
|  |  |  | if (!AssetSource.isUseAssetBundle) | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | AssetBundleUtility.Instance.UnloadAssetBundle(assetBundleName, unloadAllLoadedObjects, includeDependenice); | 
|---|
|  |  |  | } | 
|---|