• Unity 的资源加载管理方案对比


    直接引用

    大多数场景不推荐,会导致一些bug

    1. using UnityEngine;
    2. public class LoadAssetScript : MonoBehaviour
    3. {
    4. Public GameObject _referenceDirectlyOB; //直接引用
    5. private void Start()
    6. {
    7. Instantiate(_referenceDirectlyOB); //实例化资源
    8. setparent();
    9. }
    10. }

    Resource方案

    仅用于小项目和demo展示时的资源管理。

    Resources目录加载也是比较常用方便的方法,通常结合上配置表能比较准确快速的进行配置。

    弊端也是相当明显的:

    1、首先Resources目录下的所有文件都会随包打包,造成包体过大。

    2、其次Resources目录没办法热更新资源,只能重新打包游戏。

    3、再者命名对资源加载影响重大,命名的变更需要更加谨慎。

    1. using UnityEngine;
    2. public class LoadAssetScript : MonoBehaviour
    3. {
    4. Public string _resourcesPath;
    5. private void Start()
    6. {
    7. // 加载资源
    8. var prefab = Resources.Load(_resourcesPath);
    9. // 实例化资源
    10. Instantiate(prefab);
    11. }
    12. }

    Unity 读取调用资源 Resources.Load(详细+示例)_Min-篮球小菜鸡的博客-CSDN博客_resources.load unity

    AB包方案

    如何项目需要热更新资源,AssetBundle是唯一选择,但AssetBundle的使用与管理会涉及资源引用关系、资源打包分配的粒度等随着资源的增多导致复杂度上升到难以管理。

    首先你会需要用到打包脚本,将资源进行相对应的打包,期间要处理资源的依赖和复用的问题。

    之后你需要更改资源加载的方式,需要通过加载AssetBundle然后再读取其中的对应资源进行加载。这个时候根据应用场景,你需要避免AB过大而过度加载占用内存,同时也要防止AB颗粒过小而导致AB数量剧增而增加大幅管理难度。

    虽然能够使用像是AssetBundleManager/AssetBundleGraph一类的工具来辅助开发,或是制作、使用社区上的一些AssetBundle打包框架来制作资源包。但从一开始就需要考虑进项目中,会减缓开发的速度。

    AA包方案

    AssetAddressables方案。

    Unity资源管理 AssetBundle的封装Addressable系统_Peter_Gao_的博客-CSDN博客

    Addressables是对AB包方式的高级封装,大幅减小了资源管理的复杂度。

    特点:

    • 快速迭代:使用Addressable在开发前期就进入快速开发的阶段,使用任何你喜欢的资源管理技术,你都能快速的切换来Addressable系统中。几乎不需要修改代码。

    • 依赖管理:Addressable系统不仅仅会帮你管理、加载你指定的内容,同时它会自动管理并加载好该内容的全部依赖。在所有的依赖加载完成,你的内容彻底可用时,它才会告诉你加载完成。

    • 内存管理:Addressable不仅仅能记载资源,同时也能卸载资源。系统自动启用引用计数,并且有一个完善的Profiler帮助你指出潜在的内存问题。

    • 内容打包:Addressable系统自动管理了所有复杂的依赖连接,所以即使资源移动了或是重新命名了,系统依然能够高效地找到准确的依赖进行打包。当你需要将打包的资源从本地移到服务器上面,Addressable系统也能轻松做到,几乎不需要任何代价。

    https://docs.unity3d.com/Packages/com.unity.addressables@1.19/manual/index.html

    打包框架

    https://xasset.pro/docs/about

  • 相关阅读:
    Jupyter notebook 添加目录插件
    SpringBoot整合JWT
    ESD门禁闸机系统的功能说明
    CSS实现鼠标悬停图片上升显示
    基于python的对比度增强(线性变换、直方图正规化、直方图均衡化、CLAHE)
    管理上游数据源配置
    [多媒体] 多媒体封装格式 —— MP4 vs MKV
    【编程之路】面试必刷TOP101:链表(06-10,Python实现)
    前端状态管理工具pinia:pinia是什么?相较于Vuex,pinia有什么优势,如何手动添加pinia到Vue3项目中
    洛谷P2440 木材加工 —二分答案
  • 原文地址:https://blog.csdn.net/qq_42672770/article/details/126487445