当前位置: 首页 > article >正文

编辑器加载与AB包加载组合

解释:

这个 ABResMgr 类是一个资源加载管理器,它用于整合 AB包(Asset Bundle)资源加载和 编辑器模式资源加载。通过这个管理器,可以根据开发环境选择资源加载方式,既支持 运行时使用Asset Bundle加载,也支持在 Unity编辑器中进行调试和测试时,直接从资源文件夹中加载资源。

  • isDebug:一个私有布尔变量,控制是否启用编辑器模式加载。如果为 true,则在Unity编辑器中通过 EditorResMgr 直接加载资源文件夹下的资源;如果为 false,则使用 ABMgr 管理器通过Asset Bundle来加载资源。

  • 构造函数私有化:为了确保这个管理器是通过 BaseManager<T> 基类的单例模式管理。

  • LoadResAsync<T> 方法

    • 编辑器模式(Unity Editor):如果 isDebugtrue,在编辑器中通过 EditorResMgr 实例直接从文件夹中加载资源,文件路径由AB包名和资源名组合而成。
    • 非编辑器模式 或者 AB包模式:如果 isDebugfalse,则通过 ABMgr 实例来从AB包中异步加载资源。
    • T 是资源的类型参数,可以灵活加载不同类型的资源(例如 GameObject, Texture2D 等)。
  • 条件编译 #if UNITY_EDITOR:在开发和测试阶段,条件编译的代码块使得在编辑器模式下可以方便地使用文件夹中的资源,而在构建发布时仍然使用Asset Bundle来加载。

案例:

假设你正在开发一款游戏,并且希望在开发调试阶段方便地从Unity编辑器中加载资源,但在发布后的运行时使用Asset Bundle加载资源。那么可以通过这个管理器来灵活地切换这两种加载方式。

使用案例:

1.假设有以下结构的资源:
  • AB包名: weapons
  • 资源名: sword
2.编辑器资源加载:

在编辑器模式下,直接从文件夹中加载资源:

ABResMgr.Instance.LoadResAsync<GameObject>("weapons", "sword", (res) => 
{
    // 将资源实例化
    GameObject sword = GameObject.Instantiate(res);
});
3.Asset Bundle加载:

 在发布模式下,通过AB包加载资源:

ABResMgr.Instance.LoadResAsync<GameObject>("weapons", "sword", (res) => 
{
    // 将资源实例化
    GameObject sword = GameObject.Instantiate(res);
}, isSync: false);

总结

  • ABResMgr 实现了资源加载的整合,允许在开发阶段方便调试,同时在发布后使用AB包提升性能。
  • 你可以通过 isDebug 控制资源加载方式。
  • LoadResAsync<T> 方法提供了泛型异步加载的能力,支持回调函数来处理加载完成后的逻辑。


http://www.kler.cn/news/363873.html

相关文章:

  • 人工智能:未来生活与工作的变革力量
  • 详解23种设计模式——第二部分:结构型模式
  • LLM-数据集-测试集-CValues
  • C++类和对象(下篇)
  • Linux:进程优先级 进程调度切换 调度算法
  • matlab怎样自动搜索文件夹中的所有txt文件,并将每个txt文件中的数据存放到一个cell数组中——MATLAB批量处理数据
  • SQL注入原理、类型、危害与防御
  • 使用cmdline-tools安装Android SDK与NDK
  • 驱动开发系列20 - Linux Graphics Xorg-server 介绍
  • 在 Python 中使用 Tensorflow 时出错:google.protobuf
  • 汽车票预订系统:SpringBoot技术应用
  • OpenIPC开源FPV之Ardupilot配置
  • 爬虫实战练习
  • 第T7周:咖啡豆识别
  • 多模态大语言模型(MLLM)-Blip3/xGen-MM
  • 姿态估计(一)——过程记录与问题记录
  • Spring Boot 3 声明式接口:能否完全替代 OpenFeign?
  • 写在RAGFlow开源2万星标之际
  • vue3使用element-plus手动更改url后is-active和菜单的focus颜色不同步问题
  • JavaFx -- chapter03(多线程网络通信)
  • Linux——K8S的pod的调度
  • 类的创建、构造器、实例属性、实例方法
  • Java while语句练习 C语言的函数递归
  • node入门与npm
  • C++进阶-->继承(inheritance)
  • 使用Python爬虫API,轻松获取电商商品SKU信息