| | |
| | | using LitJson; |
| | | using System.IO; |
| | | using UnityEngine.Networking; |
| | | using UnityEngine.Video; |
| | | |
| | | |
| | | #if UNITY_EDITOR |
| | | using UnityEditor; |
| | |
| | | } |
| | | } |
| | | |
| | | private static readonly Dictionary<Type, string> fileExtensionDict = new Dictionary<Type, string>() |
| | | { |
| | | {typeof(GameObject), "prefab"}, |
| | | {typeof(Sprite), "png"}, |
| | | {typeof(Texture2D), "png"}, |
| | | {typeof(Shader), "shader"}, |
| | | {typeof(TextAsset), "txt"}, |
| | | {typeof(AudioClip), "wav"}, |
| | | {typeof(Font), "ttf"}, |
| | | {typeof(Material), "mat"}, |
| | | {typeof(VideoClip), "mp4"}, |
| | | {typeof(SpriteAtlas), "spriteatlasv2"}, |
| | | }; |
| | | |
| | | |
| | | public void Init() |
| | |
| | | |
| | | private string GetExtension(Type type) |
| | | { |
| | | if (type == typeof(GameObject)) |
| | | return ".prefab"; |
| | | else if (type == typeof(Sprite)) |
| | | return ".png"; |
| | | else if (type == typeof(Texture2D)) |
| | | return ".png"; |
| | | else if (type == typeof(Shader)) |
| | | return ".shader"; |
| | | else if (type == typeof(TextAsset)) |
| | | return ".txt"; |
| | | else if (type == typeof(AudioClip)) |
| | | return ".wav"; |
| | | else if (type == typeof(Font)) |
| | | return ".ttf"; |
| | | else if (type == typeof(Material)) |
| | | return ".mat"; |
| | | if (fileExtensionDict.TryGetValue(type, out string extension)) |
| | | return "." + extension; |
| | | else |
| | | { |
| | | Debug.LogErrorFormat("GetExtension() => 不支持的资源类型: {0}.", type.Name); |
| | |
| | | public T LoadAsset<T> (string directory, string name) where T : UnityEngine.Object |
| | | { |
| | | T asset = null; |
| | | |
| | | // 特殊处理 因为有一层图集的关系 directory要传入的应该是atlas的名字 |
| | | if (typeof(T) == typeof(Sprite)) |
| | | { |
| | | return LoadSprite(directory, name) as T; |
| | | } |
| | | |
| | | return LoadAssetInternal<T>(directory, name); |
| | | } |
| | | |
| | | private T LoadAssetInternal<T>(string directory, string name) where T : UnityEngine.Object |
| | | { |
| | | T asset = null; |
| | | |
| | | var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))).Replace("//", "/"); |
| | | |
| | | if (AssetSource.uiFromEditor) |
| | | { |
| | | #if UNITY_EDITOR |
| | | var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))); |
| | | |
| | | // 找不到文件时,尝试在内部继续找 |
| | | if (!File.Exists(path)) |
| | | { |
| | | path = GetRelativePath(FindFilePath(directory, name + GetExtension(typeof(T)))); |
| | | |
| | | if (string.IsNullOrEmpty(path)) |
| | | { |
| | | Debug.LogErrorFormat("LoadAsset() => 加载不到资源: {1} {0}." + path, name, directory); |
| | | return asset; |
| | | } |
| | | } |
| | | |
| | | asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path); |
| | | #else |
| | | //TODO YYL ASSET BUNDLE部分要重写处理一下 |
| | | if (prefabBundle == null) |
| | | { |
| | | // string _path = GetAssetFilePath("builtin/prefabs"); |
| | | string _path = GetAssetFilePath($"builtin/{directory}"); |
| | | prefabBundle = AssetBundle.LoadFromFile(_path); |
| | | } |
| | | asset = prefabBundle.LoadAsset(name) as t; |
| | | asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path); |
| | | #endif |
| | | } |
| | | else |
| | | { |
| | | var assetInfo = new AssetInfo(directory.ToLower(), name.ToLower()); |
| | | asset = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo, typeof(T)) as T; |
| | | } |
| | | |
| | | if (asset == null) |
| | | { |
| | | Debug.LogErrorFormat("LoadAsset() => 加载不到资源: {0}.", name); |
| | |
| | | return asset; |
| | | } |
| | | |
| | | |
| | | |
| | | public void UnloadAsset(string assetBundleName) |
| | | private Sprite LoadSprite(string atlasName, string spriteName) |
| | | { |
| | | |
| | | #if !UNITY_EDITOR |
| | | SpriteAtlas atlas = LoadAsset<SpriteAtlas>("Sprite", atlasName); |
| | | return atlas.GetSprite(spriteName); |
| | | #else |
| | | // 编辑器下可以直接加载没啥问题 |
| | | return LoadAssetInternal<Sprite>("Sprite/" + atlasName, spriteName); |
| | | #endif |
| | | } |
| | | |
| | | public void UnloadAsset(string assetBundleName, string assetName) |
| | | { |
| | | if (AssetSource.uiFromEditor) |
| | | return; |
| | | |
| | | AssetBundleUtility.Instance.UnloadAsset(assetBundleName, assetName); |
| | | } |
| | | |
| | | public void UnloadAssetBundle(string assetBundleName, bool unloadAllLoadedObjects, bool includeDependenice) |
| | | { |
| | | if (AssetSource.uiFromEditor) |
| | | return; |
| | | AssetBundleUtility.Instance.UnloadAssetBundle(assetBundleName, unloadAllLoadedObjects, includeDependenice); |
| | | } |
| | | |
| | | public string GetAssetFilePath(string _assetKey) |