hch
2 天以前 df03c997716c6f5fbd4b87c01caef1d2e75165fc
Main/ResModule/ResManager.cs
@@ -1,13 +1,14 @@
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;
using UnityEngine.UI;
#if UNITY_EDITOR
@@ -67,14 +68,16 @@
    {
        {typeof(GameObject), "prefab"},
        {typeof(Sprite), "png"},
        {typeof(Texture2D), "png"},
        {typeof(Shader), "shader"},
        {typeof(Texture2D), "jpg"},
        {typeof(Texture), "jpg"},
        { typeof(Shader), "shader"},
        {typeof(TextAsset), "txt"},
        {typeof(AudioClip), "wav"},
        {typeof(Font), "ttf"},
        {typeof(Material), "mat"},
        {typeof(VideoClip), "mp4"},
        {typeof(SpriteAtlas), "spriteatlasv2"},
        {typeof(SkeletonDataAsset), "asset"},
    };
@@ -123,7 +126,7 @@
    }
#endif
    public T LoadAsset<T> (string directory, string name) where T : UnityEngine.Object
    public T LoadAsset<T> (string directory, string name, bool needExt = true) where T : UnityEngine.Object
    {
        T asset = null;
        //  特殊处理 因为有一层图集的关系 directory要传入的应该是atlas的名字
@@ -131,17 +134,27 @@
        {
            return LoadSprite(directory, name) as T;
        }
        else if (typeof(T) == typeof(SkeletonDataAsset))
        {
            //文件目录调整,name中包含了路径
            if (name.Contains("/"))
            {
                directory += name.Substring(0, name.LastIndexOf("/"));
                name = name.Substring(name.LastIndexOf("/") + 1);
            }
        return LoadAssetInternal<T>(directory, name);
            directory = directory.Replace("\\", "/");
        }
        return LoadAssetInternal<T>(directory, name, needExt);
    }
    private T LoadAssetInternal<T>(string directory, string name) where T : UnityEngine.Object
    private T LoadAssetInternal<T>(string directory, string name, bool needExt = true) where T : UnityEngine.Object
    {
        T asset = null;
        var path = ($"Assets/ResourcesOut/{directory}/{name}" + (needExt ? GetExtension(typeof(T)) : "")).Replace("//", "/").Trim().Replace("\\", "/");
        var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))).Replace("//", "/").Trim().Replace("\\", "/");
        if (AssetSource.uiFromEditor)
        if (!AssetSource.isUseAssetBundle)
        {
#if UNITY_EDITOR
            asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
@@ -149,6 +162,28 @@
        }
        else
        {
            if (!needExt)
            {
                //外部用到的自己加后缀,内部统一去除后缀名
                name = name.Substring(0, name.LastIndexOf("."));
            }
            if (directory == "UI" || directory == "UIComp" || directory.StartsWith("Sprite")
            || directory == "Battle/Prefabs" || directory == "Materials")
            {
                directory = "UI/" + directory;
            }
            else if (name == "Hero_001")
            {
                directory = "UI/Hero/SpineRes";
            }
            else if (directory.Contains("Texture"))
            {
                directory = "maps/" + name;
            }
            var assetInfo = new AssetInfo(directory.ToLower(), name.ToLower());
            asset = AssetBundleUtility.Instance.Sync_LoadAsset(assetInfo, typeof(T)) as T;
        }
@@ -161,17 +196,35 @@
        return asset;
    }
    private Sprite LoadSprite(string atlasName, string spriteName)
    public string[] LoadConfig(string name)
    {
// #if !UNITY_EDITOR
        SpriteAtlas atlas = LoadAsset<SpriteAtlas>("Sprite", atlasName.Replace("Sprite/", ""));
        return atlas.GetSprite(spriteName);
// #else
        // return ResManager.Instance.LoadAssetInternal<Sprite>(atlasName, spriteName);
// #endif
        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);
    }
    public void LoadAssetAsync<T>(string directory, string name, Action<bool, UnityEngine.Object> callBack) where T : UnityEngine.Object
    private Sprite LoadSprite(string atlasName, string spriteName)
    {
        if (!AssetSource.isUseAssetBundle)
        {
            SpriteAtlas atlas = LoadAsset<SpriteAtlas>("Sprite", atlasName.Replace("Sprite/", ""));
            return atlas.GetSprite(spriteName);
        }
        else
            return LoadAssetInternal<Sprite>(atlasName, spriteName);
    }
    public void LoadAssetAsync<T>(string directory, string name, Action<bool, UnityEngine.Object> callBack, bool needExt = true) where T : UnityEngine.Object
    {
        //  特殊处理 因为有一层图集的关系 directory要传入的应该是atlas的名字
        if (typeof(T) == typeof(Sprite))
@@ -180,7 +233,7 @@
            return;
        }
        LoadAssetAsyncInternal<T>(directory, name, callBack);
        LoadAssetAsyncInternal<T>(directory, name, callBack, needExt);
    }
    private void LoadSpriteAsync<T>(string atlasName, string spriteName, Action<bool, UnityEngine.Object> callBack) where T : UnityEngine.Object
@@ -189,7 +242,8 @@
        LoadAssetAsync<SpriteAtlas>(atlasName, spriteName, (isLoaded, atlas) => {
            if (isLoaded)
            {
                callBack?.Invoke(isLoaded, atlas.GetSprite(spriteName));
                SpriteAtlas _atlas = atlas as SpriteAtlas;
                callBack?.Invoke(isLoaded, _atlas.GetSprite(spriteName));
            }
            else
            {
@@ -202,11 +256,11 @@
#endif
    }
    private void LoadAssetAsyncInternal<T>(string directory, string name, Action<bool, UnityEngine.Object> callBack) where T : UnityEngine.Object
    private void LoadAssetAsyncInternal<T>(string directory, string name, Action<bool, UnityEngine.Object> callBack, bool needExt = true) where T : UnityEngine.Object
    {
        var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", GetExtension(typeof(T))).Replace("//", "/");
        var path = string.Concat($"Assets/ResourcesOut/{directory}/{name}", (needExt ? GetExtension(typeof(T)) : "")).Replace("//", "/");
        if (AssetSource.uiFromEditor)
        if (!AssetSource.isUseAssetBundle)
        {
#if UNITY_EDITOR
            var asset = UnityEditor.AssetDatabase.LoadAssetAtPath<T>(path);
@@ -222,7 +276,7 @@
    public void UnloadAsset(string assetBundleName, string assetName)
    {
        if (AssetSource.uiFromEditor)
        if (!AssetSource.isUseAssetBundle)
            return;
        AssetBundleUtility.Instance.UnloadAsset(assetBundleName, assetName);
@@ -230,7 +284,7 @@
    public void UnloadAssetBundle(string assetBundleName, bool unloadAllLoadedObjects, bool includeDependenice)
    {
        if (AssetSource.uiFromEditor)
        if (!AssetSource.isUseAssetBundle)
            return;
        AssetBundleUtility.Instance.UnloadAssetBundle(assetBundleName, unloadAllLoadedObjects, includeDependenice);
    }