【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); 
        });
    }
相关推荐
怣疯knight13 小时前
unity上传git需要上传哪些文件
git·unity
世洋Blog13 小时前
Unity开发微信小游戏-合理的规划使用YooAsset
unity·c#·微信小游戏
hashiqimiya13 小时前
unity配置外部编辑器rider
unity·编辑器·游戏引擎
jtymyxmz16 小时前
《Unity Shader》10.1.3 反射
unity·游戏引擎
avi91112 天前
发现一个宝藏Unity开源AVG框架,视觉小说的脚手架
unity·开源·框架·插件·tolua·avg
一线灵2 天前
跨平台游戏引擎 Axmol-2.10.0 发布
游戏引擎
沉默金鱼3 天前
Unity实用技能-格式化format文字
ui·unity·游戏引擎
jyy_993 天前
通过网页地址打开unity的exe程序,并传参
unity
qq_205279053 天前
Unity TileMap 使用经验
unity·游戏引擎
心灵宝贝3 天前
Mac Unity 2018.dmg游戏工具 安装步骤 简单易懂教程(附安装包)
macos·unity·游戏引擎