Main/Manager/ResManager.cs
@@ -7,6 +7,8 @@
using LitJson;
using System.IO;
using UnityEngine.Networking;
using UnityEngine.Video;
#if UNITY_EDITOR
using UnityEditor;
@@ -61,6 +63,19 @@
        }
    }
    
    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()
@@ -75,22 +90,8 @@
    
    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);
@@ -125,32 +126,34 @@
    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);
@@ -159,11 +162,30 @@
        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)