From c6691d9e2f065478263b92f96ef7978e3e13f96b Mon Sep 17 00:00:00 2001 From: ALEXTANG <574809918@qq.com> Date: Thu, 1 Sep 2022 15:00:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=9B=E5=9E=8B=E7=BA=A6=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 泛型约束 --- .../DefaultResourceHelper.cs | 2 +- .../Runtime/Core/Res/IResourceHelper.cs | 5 +- .../Scripts/Runtime/Core/Res/TResource.cs | 20 ++++-- .../Runtime/Core/Res/UnityResourceHelper.meta | 8 +++ .../UnityResourceHelper.cs | 61 +++++++++++++++++++ .../UnityResourceHelper.cs.meta | 11 ++++ 6 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper.meta create mode 100644 Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs create mode 100644 Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs.meta diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs index 9a4a000e..b6ba58bb 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/DefaultResourcesHelper/DefaultResourceHelper.cs @@ -3,7 +3,7 @@ using UnityEngine; namespace TEngine.Runtime { - public class DefaultResourceHelper:ResourceHelperBase + public class DefaultResourceHelper : ResourceHelperBase { public override GameObject Load(string path) { diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/IResourceHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/IResourceHelper.cs index b515c4a2..7b6ad364 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/Res/IResourceHelper.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/IResourceHelper.cs @@ -45,7 +45,7 @@ namespace TEngine.Runtime /// /// /// - void LoadAsync(string path, Action callBack, bool withSubAsset = false) where T : class; + void LoadAsync(string path, Action callBack, bool withSubAsset = false) where T : UnityEngine.Object; } /// @@ -90,6 +90,7 @@ namespace TEngine.Runtime /// /// /// - public abstract void LoadAsync(string path, Action callBack, bool withSubAsset = false) where T : class; + public abstract void LoadAsync(string path, Action callBack, bool withSubAsset = false) + where T : UnityEngine.Object; } } \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs index d4790e45..bb8a8aed 100644 --- a/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/TResource.cs @@ -9,6 +9,7 @@ namespace TEngine.Runtime public class TResources { private static IResourceHelper m_ResourceHelper; + /// /// 设置游戏资源加载辅助器。 /// @@ -22,7 +23,7 @@ namespace TEngine.Runtime m_ResourceHelper = resourceHelper; } - + public static GameObject Load(string path) { if (m_ResourceHelper == null) @@ -30,8 +31,10 @@ namespace TEngine.Runtime Log.Error("Resources helper is invalid."); return null; } + return m_ResourceHelper.Load(path); } + public static GameObject Load(string path, Transform parent) { if (m_ResourceHelper == null) @@ -39,8 +42,10 @@ namespace TEngine.Runtime Log.Error("Resources helper is invalid."); return null; } - return m_ResourceHelper.Load(path,parent); + + return m_ResourceHelper.Load(path, parent); } + public static T Load(string path) where T : UnityEngine.Object { if (m_ResourceHelper == null) @@ -48,6 +53,7 @@ namespace TEngine.Runtime Log.Error("Resources helper is invalid."); return null; } + return m_ResourceHelper.Load(path); } @@ -58,16 +64,20 @@ namespace TEngine.Runtime Log.Error("Resources helper is invalid."); return; } - m_ResourceHelper.LoadAsync(path,callBack); + + m_ResourceHelper.LoadAsync(path, callBack); } - public static void LoadAsync(string path, Action callBack, bool withSubAsset = false) + + public static void LoadAsync(string path, Action callBack, bool withSubAsset = false) + where T : UnityEngine.Object { if (m_ResourceHelper == null) { Log.Error("Resources helper is invalid."); return; } - m_ResourceHelper.LoadAsync(path,callBack,withSubAsset); + + m_ResourceHelper.LoadAsync(path, callBack, withSubAsset); } } } \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper.meta b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper.meta new file mode 100644 index 00000000..79849dfe --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23322791b7495354cab1d50cb1ddeaa4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs new file mode 100644 index 00000000..c331ebc1 --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace TEngine.Runtime +{ + public class UnityResourceHelper : ResourceHelperBase + { + public override GameObject Load(string path) + { + return Resources.Load(path); + } + + public override GameObject Load(string path, Transform parent) + { + var obj = Load(path); + if (obj == null) + { + return null; + } + + if (parent != null) + { + obj.transform.SetParent(parent); + } + + return obj; + } + + public override T Load(string path) + { + return Resources.Load(path); + } + + public override void LoadAsync(string path, Action callBack) + { + MonoUtility.StartCoroutine(ReallyLoadAsync(name, callBack)); + } + + private IEnumerator ReallyLoadAsync(string name, Action callback = null) where T : UnityEngine.Object + { + ResourceRequest request = Resources.LoadAsync(name); + + yield return request; + + if (request.asset is GameObject) + { + callback?.Invoke(GameObject.Instantiate(request.asset) as T); + } + else + { + callback?.Invoke(request.asset as T); + } + } + + public override void LoadAsync(string path, Action callBack, bool withSubAsset = false) + { + MonoUtility.StartCoroutine(ReallyLoadAsync(name, callBack)); + } + } +} \ No newline at end of file diff --git a/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs.meta b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs.meta new file mode 100644 index 00000000..4bc6b47a --- /dev/null +++ b/Assets/TEngine/Scripts/Runtime/Core/Res/UnityResourceHelper/UnityResourceHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b05b95aedc09ce40a0de7b4de542e33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: