「这是我参与2022首次更文挑战的第28天,活动详情查看:2022首次更文挑战」。
作为一名优秀的开发者,对于技术的探求应该是永无止步的,如何让自己更进步,那就只有不停的学习,不停的充电.而这些都都是说起来容易做起来难,坚持才是难的地方 --蛙哈哈
Addressable详解-05
1.优秀的性能分析工具
Addressables的Event Viewer是一个方便我们进行资源加载、卸载、内存占用管理的调试工具。
我们可以进入Addressables Group > Tools > Evnet viewer打开调试窗口。
2.优秀的资源冗余分析处理工具
Analyze是Addressable提供的一个方便、扩展性强的小工具,能快速分析、解决ab资源包的问题,也可以根据自己的需求定制分析规则,减少资源包出现的大小问题。
3.实践部分
Unity建议将游戏内容分为两类:
Static(Can not Change Post Release)内容,不会更新的静态内容。
Dynamic(Can Change Post Release)内容,希望更新的动态内容。
在这种结构中,静态内容附带在应用程序(或安装后很快下载),并且驻留在很少的并且较大的Bundles中。动态内容驻留在网上,最好是在较小的包中,以尽量减少每次更新所需的数据量。Addressable Assets System的目标之一是使该结构易于使用和修改,并且无需更改脚本。
3.1Can Change Post Release
3.2Cannot Change Post Release
当此版本处于活动状态时,有些玩家的设备上有Local_Static,并且可能还在本地缓存了其中一个或两个远程包。
如果你从每个Group (AssetA、AssetL和AssetX)修改了一个Asset ,那么运行Check for Content Update Restrictions,本地Addressable设置中的结果现在是:
请注意,prepare operation实际上就是编辑静态组,这可能会与正常的理解有冲突。系统会自动构建上述布局,但是任何静态Groups都会丢弃生成结果。因此,您将从玩家的角度得出以下结论
LocalStatic bundle已经在玩家的设备上,所以不能更改它。这个旧版本的AssetA不再被引用。相反,它被残留在玩家设备上,作为垃圾数据。
Remote_Staticbundle保持不变。如果它还没有缓存在玩家的设备上,当请求AssetM或AssetN时,它将会被下载。像AssetA一样,这个旧版本的AssetL不再被引用。
Remote_non-Static包现在已经过时了。您可以从服务器中删除它,但无论是哪种方式,都不会再从这里下载了。如果已经缓存了,那么它会一直留在缓存。像AssetA和AssetL一样,这个旧版本的AssetX也不再被引用。
旧的Remote_non-Staticbundle 被替换为一个新版本,该版本由hash文件来区分。修改后的AssetX版本将使用这个新Bundle进行更新。
content_update_group的Bundle将由被引用的、修改后的Assets组成。
4.总结
1、任何更改后的本地Assets都会永久残存在在用户的设备上。并且保持未使用状态。
2、如果用户已经缓存了一个非静态Bundle,他们将需要重新下载包,包括未更改的Assets(例如,AssetY和Assetz)。理想情况下,用户没有缓存Bundle,在这种情况下,他们只需要下载新的Remote_non-Static包。
3、如果用户已经缓存了Static_Remote bundle,他们只需要下载更新的Asset(在本例中,通过content_update_group下载AssetL)。但这种情况是很理想的。如果用户没有缓存过Bundle,则必须通过content_update_group下载新的AssetL,并通过未引用的Remote_Static bundle下载现已失效的AssetL。不管初始的缓存状态如何,在完成的某个时候,用户都会在他们的设备上拥有已停用的AssetL,尽管从未被访问或者引用过,但却会被永久的缓存。