【Unity程序技巧】 资源加载管理器


👨‍💻个人主页@元宇宙-秩沅

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 秩沅 原创

👨‍💻 收录于专栏Unity基础实战

⭐🅰️⭐



文章目录


⭐前言⭐


🎶(W) 资源加载管理器


1.涉及知识点



2. 特点


  • 方便加载资源,为资源加载提供了接口

3.脚本


csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;


public class ResourceManager : SingleManager<ResourceManager>
{
    //同步加载资源方法
    public T Load<T>(string name) where T:Object
    {
        T resource = Resources.Load<T>(name);
     
        if (resource is GameObject)

            return GameObject.Instantiate(resource);
        else
            return resource;
    }


    //异步加载资源方法
    public void LoadAsync<T>(string name, UnityAction<T> callback) where T:Object
    {
        //开启异步加载的协程
        UpdateManager.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback));
    }

    //真正的协同程序函数  用于 开启异步加载对应的资源
    private IEnumerator ReallyLoadAsync<T>(string name, UnityAction<T> callback) where T : Object
    {
        ResourceRequest r = Resources.LoadAsync<T>(name);
        yield return r;
        //等待加载完之后回调
        if (r.asset is GameObject)

            callback(GameObject.Instantiate(r.asset) as T);
        else
            callback(r.asset as T);
    }
   //为什么这里要用Unity委托,因为实例化语句执行后我们要获得实例化的返回值。但在协同函数中,无法实现,所以需要一个有返回值的委托代替

}
  • 加载测试
csharp 复制代码
    void Start()
    {
        //同步加载
        ResourceManager.GetInstance().Load<GameObject>("asda");
        //异步加载
        ResourceManager.GetInstance().LoadAsync<GameObject>("asdsa",(aa)=>
        {
            print(aa.name); 
        });
    }

⭐🅰️⭐


【Unityc#专题篇】之c#进阶篇】

【Unityc#专题篇】之c#核心篇】

【Unityc#专题篇】之c#基础篇】

【Unity-c#专题篇】之c#入门篇】

【Unityc#专题篇】---进阶章题单实践练习

【Unityc#专题篇】---基础章题单实践练习

【Unityc#专题篇】---核心章题单实践练习


你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!



using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.Events;

public class ResourceManager : SingleManager

{

//同步加载资源方法

public T Load(string name) where T:Object

{

T resource = Resources.Load(name);

复制代码
    if (resource is GameObject)

        return GameObject.Instantiate(resource);
    else
        return resource;
}


//异步加载资源方法
public void LoadAsync<T>(string name, UnityAction<T> callback) where T:Object
{
    //开启异步加载的协程
    UpdateManager.GetInstance().StartCoroutine(ReallyLoadAsync(name, callback));
}

//真正的协同程序函数  用于 开启异步加载对应的资源
private IEnumerator ReallyLoadAsync<T>(string name, UnityAction<T> callback) where T : Object
{
    ResourceRequest r = Resources.LoadAsync<T>(name);
    yield return r;
    //等待加载完之后回调
    if (r.asset is GameObject)

        callback(GameObject.Instantiate(r.asset) as T);
    else
        callback(r.asset as T);
}

//为什么这里要用Unity委托,因为实例化语句执行后我们要获得实例化的返回值。但在协同函数中,无法实现,所以需要一个有返回值的委托代替

}

复制代码
+ 加载测试

```csharp
    void Start()
    {
        //同步加载
        ResourceManager.GetInstance().Load<GameObject>("asda");
        //异步加载
        ResourceManager.GetInstance().LoadAsync<GameObject>("asdsa",(aa)=>
        {
            print(aa.name); 
        });
    }
相关推荐
龚子亦4 小时前
【数字人开发】Unity+百度智能云平台实现短语音文本识别功能
百度·unity·游戏引擎
Magnum Lehar5 小时前
wpf游戏引擎主界面实现3
ui·游戏引擎·wpf
神码编程6 小时前
【Unity】MiniGame编辑器小游戏(二)扫雷【Minesweeper】
unity·编辑器·扫雷
Magnum Lehar8 小时前
wpf主界面游戏引擎实现
游戏引擎·wpf
Magnum Lehar8 小时前
3d游戏引擎的ContentTools的实现
3d·游戏引擎
RocketJ1 天前
推荐使用的Unity插件(行为树Behavior )
unity·游戏引擎
Tatalaluola1 天前
【Quest开发】初始项目环境配置
unity·游戏引擎·vr
future14121 天前
FairyGUI学习
学习·游戏·ui·unity
异次元的归来1 天前
UE5反射系统分析(一)generated.h
ue5·游戏引擎·unreal engine
AgilityBaby1 天前
UE5创建蒙太奇动画并播放和在动画蒙太奇中创建动画通知状态
笔记·学习·ue5·游戏引擎·蓝图·蒙太奇动画