您当前的位置: 首页 >  unity

Peter_Gao_

暂无认证

  • 0浏览

    0关注

    621博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

Peter_Gao_ 发布时间:2022-08-23 16:19:48 ,浏览量:0

直接引用

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

using UnityEngine;

public class LoadAssetScript : MonoBehaviour
{
    Public GameObject _referenceDirectlyOB; //直接引用
    
    private void Start()
    {
        Instantiate(_referenceDirectlyOB); //实例化资源
        setparent();
    }
}

Resource方案

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

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

弊端也是相当明显的:

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

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

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

using UnityEngine;

public class LoadAssetScript : MonoBehaviour
{
    Public string _resourcesPath;
    private void Start()
    {
        // 加载资源
        var prefab = Resources.Load(_resourcesPath); 
        
        // 实例化资源
        Instantiate(prefab);
    }
}

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

关注
打赏
1664521772
查看更多评论
立即登录/注册

微信扫码登录

0.0353s