Notifications
Article
已有项目要不要迁移到Addressable系统?
Published 3 months ago
856
3
已有项目要不要迁移到Addressable系统?
你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。
对于已有的项目要不要迁移到Addressable系统上,我一直有些疑问,今天我要找大智请教一下。
小新:“Addressable确实是个好东西,但是对于已有的项目,要不要迁移到Addressable上面呢?”
大智:“这个问题是个好问题。其实我没办法给你一个确定的答案。得根据实际情况来。Addressable有哪些好处?小新你总结一下吧?”
小新:“Addressable的好处就是简化了资产管理的工作流,包括打包、加载、更新等。”
大智:“没错,这只是表面的一方面。除了这些还有很重要的一点就是内存管理,你还记不记得前两天咱们学习迁移到Addressable的时候,指出来直接引用和Resources目录的内存问题?
小新:“哦,对对。采用直接引用和Resources目录的资源会在场景加载时把这些资源都加载到内存中,有时候可能都用不到这些资源,但是仍旧占用了内存。就在前两天的视频教程里面。”
大智:“对,所以针对已有项目要不要迁移到Addressable系统的问题,我大概总结了一下几种情况:”
  • 第一种:如果你的项目对运行时内存要求不高,可以不迁移。
  • 第二种:如果你的项目已经开发过半,且已有较成熟的assetbundle管理模块,可以不迁移。
  • 第三种:如果你的项目没有使用assetbundle,同时有运行时内存的问题,考虑迁移到Addressable(这种迁移通常都比较容易,因为都是本地资源,没有涉及到从服务器下载assetbundle)。
  • 如果是新项目的话,建议使用Addressable。
小新:“这样我就比较明白了。”
大智:“嗯,那你简单总结下如何迁移到Addressable吧?”
小新:“好嘞,请看我的表演:”

迁移到Addressable

使用资产有三种传统方法:
  • 直接引用:直接在组件上引用或者场景中使用。
  • Resources文件夹:将资产添加到Resources文件夹并按文件名加载。
  • Asset bundle:将资产打包到Asset bundle中,然后按文件路径加载它们和依赖项。

从直接引用迁移

要从这种方法迁移,按照下列步骤操作:
  1. 将对象的直接引用替换为AssetReference引用(例如,public GameObject directRefMember;变为public AssetReference AssetRefMember;)。
  2. 将资源拖到对应组件的Inspector上,和原来直接引用一样(这个过程非addressable的资源会被自动标记为addressable)。
  3. 如果你要基于对象而不是字符串地址加载addressable资产,直接用AssetReference对象实例化该资产(例如AssetRefMember.LoadAssetAsync<GameObject>();AssetRefMember.InstantiateAsync(pos, rot);)。
注意:addressable系统中是异步加载。当你将直接引用更新为AssetReference引用时,还必须将代码更新为异步操作。

从Resources文件夹迁移

当你将Resources文件夹中的资产标记为Addressable时,系统会弹框提示,你可以选择自动将资产从Resources文件夹移动到你项目中名为Resources_moved的新文件夹中。被移动的资产的默认地址是原来Resources目录下的旧路径,除了根目录变成了Resources_moved。(注意Addressable 1.2.4及以前版本在自动转换时路径有些问题,转换完需要手动调整一下)
你的加载代码可能从Resources.LoadAsync<GameObject>("desert/tank.prefab");变为Addressables.LoadAssetAsync<GameObject>("desert/tank.prefab");。

从Asset Bundle迁移

当你安装或打开Addressable系统窗口时,Unity会弹窗提示是否将所有Assetbundle包转换为Addressable组。
  • 选择是的话会自动转换;
  • 如果你选择手动转换资产,单击“ Ignore”按钮。然后,使用前面介绍的直接引用或资源文件夹迁移方法。
一个资产的默认地址是它的文件路径。如果将文件路径用作资产的地址,则和之前用Assetbundle加载的方式相同。Addressable系统会处理加载asset bundle以及其依赖项。
洪流学堂微信公众号中回复addr可以获取最新版Addressable中文手册。
Tags:
大智
你的Unity技术探路者/洪流学堂公众号主理人/XR创业者 - Student
33
Comments
曹操
3 months ago
新项目直接上了
0
Joe Wang
3 months ago
Script Programmer
原来官方也知道AB用起来问题很多么😂
0
小僧虚竹
3 months ago
棒棒
楼主你好,RemoteLoadPath能不能在脚本里动态设置呢?
0