From 7dd4942be34ac510891f880b3de7b36c39666b1a Mon Sep 17 00:00:00 2001
From: xhxy <2290327506@qq.com>
Date: Wed, 23 Apr 2025 21:09:19 +0800
Subject: [PATCH] =?UTF-8?q?=E8=B5=84=E6=BA=90=E5=8A=A0=E8=BD=BD=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Assets/Resources/Test/Cube.prefab | 2 +-
Assets/Scripts/ProjectBase/Res.meta | 8 +++
Assets/Scripts/ProjectBase/Res/ResMgr.cs | 52 +++++++++++++++++++
Assets/Scripts/ProjectBase/Res/ResMgr.cs.meta | 11 ++++
Assets/Scripts/ProjectBase/Test/Test.cs | 14 ++++-
5 files changed, 84 insertions(+), 3 deletions(-)
create mode 100644 Assets/Scripts/ProjectBase/Res.meta
create mode 100644 Assets/Scripts/ProjectBase/Res/ResMgr.cs
create mode 100644 Assets/Scripts/ProjectBase/Res/ResMgr.cs.meta
diff --git a/Assets/Resources/Test/Cube.prefab b/Assets/Resources/Test/Cube.prefab
index 3609d29..a279e16 100644
--- a/Assets/Resources/Test/Cube.prefab
+++ b/Assets/Resources/Test/Cube.prefab
@@ -113,7 +113,7 @@ MonoBehaviour:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3745365020364595915}
- m_Enabled: 1
+ m_Enabled: 0
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 278639fb612259b4890f4f8615f9305f, type: 3}
m_Name:
diff --git a/Assets/Scripts/ProjectBase/Res.meta b/Assets/Scripts/ProjectBase/Res.meta
new file mode 100644
index 0000000..cbf283a
--- /dev/null
+++ b/Assets/Scripts/ProjectBase/Res.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7c531973b0ca77a47b429cce002fa775
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/ProjectBase/Res/ResMgr.cs b/Assets/Scripts/ProjectBase/Res/ResMgr.cs
new file mode 100644
index 0000000..cfdfb82
--- /dev/null
+++ b/Assets/Scripts/ProjectBase/Res/ResMgr.cs
@@ -0,0 +1,52 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.Events;
+
+///
+/// 资源加载模块
+/// 1异步加载,2委托和lambda表达式,3协程,4泛型
+///
+public class ResMgr : BaseManager
+{
+ //同步加载资源
+ public T Load(string name)where T:Object
+ {
+ T res = Resources.Load(name);
+ //如果对象是一个GameObject类型的 把他实例化后返回出去 外部直接使用即可
+ if(res is GameObject)
+ {
+ return GameObject.Instantiate(res);
+ }
+ else//TextAsset AudioClip 不需要实例化,只需要赋值给某些对象
+ {
+ return res;
+ }
+
+
+ }
+
+ //异步加载资源
+ public void LoadAsync(string name, UnityAction callback ) where T : Object
+ {
+ //开启异步加载的协程
+ MonoMgr.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback));
+ }
+
+ //真正的协同程序函数,用于开启异步加载对应的资源
+ private IEnumerator ReallyLoadAsync(string name, UnityAction callback) where T : Object
+ {
+ ResourceRequest r = Resources.LoadAsync(name);
+ yield return r;
+ if(r.asset is GameObject)
+ {
+ callback(GameObject.Instantiate(r.asset) as T);
+ }
+ else
+ {
+ callback(r.asset as T);
+ }
+
+ }
+
+}
diff --git a/Assets/Scripts/ProjectBase/Res/ResMgr.cs.meta b/Assets/Scripts/ProjectBase/Res/ResMgr.cs.meta
new file mode 100644
index 0000000..e186647
--- /dev/null
+++ b/Assets/Scripts/ProjectBase/Res/ResMgr.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 684e92a517a01854c8297ba0bb997d97
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/ProjectBase/Test/Test.cs b/Assets/Scripts/ProjectBase/Test/Test.cs
index 74fa0a8..ae81c1a 100644
--- a/Assets/Scripts/ProjectBase/Test/Test.cs
+++ b/Assets/Scripts/ProjectBase/Test/Test.cs
@@ -25,13 +25,23 @@ public class Test : MonoBehaviour
{
if(Input.GetMouseButtonDown(0))
{
- PoolMgr.GetInstance().GetObj("Test/Cube");
+ // PoolMgr.GetInstance().GetObj("Test/Cube");
+ GameObject obj = ResMgr.GetInstance().Load("Test/Cube");
+ obj.transform.localScale = Vector3.one*2;
}
if (Input.GetMouseButtonDown(1))
{
- PoolMgr.GetInstance().GetObj("Test/Sphere");
+ // PoolMgr.GetInstance().GetObj("Test/Sphere");
+ ResMgr.GetInstance().LoadAsync("Test/Cube", (obj) => obj.transform.localScale = Vector3.one * 2) ;
}
}
+
+ //等异步资源加载完成后,再进入这个函数里面. //放到资源加载的委托参数里面 ResMgr.GetInstance().LoadAsync("Test/Cube", DoSomthing);
+ private void DoSomthing(GameObject obj)
+ {
+ //做一些资源真正加载出来后想做的事情
+ obj.transform.localScale = Vector3.one * 2;
+ }
}