【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); 
        });
    }
相关推荐
垂葛酒肝汤19 小时前
Unity的UI扫光效果Shader
ui·unity·游戏引擎
mxwin1 天前
Unity Shader Alpha测试 · 模板测试 · 深度测试
unity·游戏引擎
2601_956002811 天前
冬日狂想曲(赠去马赛克补丁)2026.5.13最新版免费下载 转存后自动更新 (看到请立即转存 资源随时失效)pc手机版通用
智能手机·游戏引擎·电脑·游戏程序·动画·游戏美术
Sator11 天前
unity解决粒子与物体接触时的硬边缘问题
unity·游戏引擎
RPGMZ1 天前
RPGMZ NPC头顶自动显示一段消息
前端·游戏引擎·rpgmz·rpgmakermz
程序员JerrySUN1 天前
Jetson边缘嵌入式实战课程第三讲:L4T 与 Jetson 系统架构
linux·服务器·人工智能·安全·unity·系统架构·游戏引擎
萌萌的提莫队长1 天前
Unity HDRP 渲染管线 Camera 输出到RenderTexture没有Alpha通道
unity·游戏引擎
winlife_1 天前
Unity Editor 工具不该用反射写组件字段:SerializedObject 在 4 个场景里非用不可
unity·自动化·游戏引擎
星河耀银海1 天前
Unity C#入门:变量的定义与访问权限(public/private)
unity·c#·lucene
郝学胜-神的一滴1 天前
中级OpenGL教程 005:为球体&平面注入法线灵魂
c++·unity·图形渲染·three.js·opengl·unreal