JoshWindsor 发表于 2022-10-16 14:06

Unity资源管理:Unity 框架如何做好资源管理

前言

Unity 资源管理需求分析


Unity资源管理主要需求:


Unity资源管理的技术方案
我们先回顾一下Unity的一些资源管理方案,分析一下各自的优缺点。


A: 代码如何加载资源
先加载AssetsBundle, 然后再从AssetsBundle里面读取资源出来。这种方式确实能读取到资源,但是有一个很严重的问题,那就是开发的时候,每次都要对资源打ab包,每次多加一个资源的时候要多打一次ab包,这样,其实用起来是不方便的。所以我们想了个办法,通过条件编译,加一个预定义开关,如果是编辑器调试模式,那么我们直接使用AssetsDataBase.load来加载资源,不用打ab包,如果是发布模式,才从Ab包里面读取资源。这样开发的时候不用管ab包,打包发布的时候来做ab包即可。
B: AssetsBundle资源包放哪里呢?
AssetsBundle资源包非常灵活,既可以放远程服务器,又可以放本地,接下来我们一起来看下AssetsBundle资源包如何存放,如何更新。
打包的时候,如果你想打入到安装包里面去,那么我们可以把Ab资源包放StreammingAssets目录下,打包进去。加载的时候,使用UnityWebRequest加载StreammingAssets目录下的ab包。如果打空包, 那么StreammingAssets不放任何资源包就可以了。AssetsBundle更新的时候, 先根据版本判断,下载最新的AssetsBundle到私有可写目录下(每个应用,在操作系统上都有自己的一个可写的私有目录)。
C: 如何使用更新AssetsBundle包
下载AssetsBundle到app私有目录以后, 编写一个加载AssetsBundle的接口,这个函数里面,先去私有目录下找, 是否有对应的AssetsBundle,如果有,就从私有目录加载,如果没有,就从本地的StreammingAssets路径下加载。这样就能保证,每次优先从私有下载目录下加载AssetsBundle资源包。
D: 资源包要分平台与渠道。
我们知道不同的平台(win64, x86, Mac, iOS Android) 要打不同的资源包,所以我们一般会扩展编辑器,统一一个窗口来管理与打包AssetsBundle资源包。打包界面,如图:


每次打包的时候,你知道打的是哪个平台,哪个渠道哪个版本的资源包,输出的时候也分平台分渠道。




3 基于Addressable 的资源管理。
Unity 自己推出了基于Addressable的资源管理,本质上和我们上面的AssetsBundle系统类似,有兴趣的同学可以关注一下这个模式的资源管理的发展。
资源管理与更新,是Unity架构师的重中之重,希望大家能有收获。
页: [1]
查看完整版本: Unity资源管理:Unity 框架如何做好资源管理