懒加载扩展 UPM 软件包

为何使用懒加载(按需加载)

您的项目可能需要在每个skeleton上使用大量的皮肤和atlas页textures, 但只有小部分需要在启动时加载. 我们注意到, 所有atlas textures均通过SkeletonDataAsset间接引用, 因此会在加载skeleton时将其一并加载. 这与Unity的标准加载行为一致.

为了优化内存占用和App下载体积, 可使用懒加载UPM包在运行时动态加载texture. 它可以与Unity Addressables等组件集成, 仅在应用了皮肤后再下载其对应的高分辨率atlas textures. 该功能以轻微的运行时加载延迟为代价, 减少初始加载体积.

UPM包

Spine-Unity的懒加载功能可通过独立的Unity包管理器(UPM)扩展包获取. 目前提供两种UPM包:

Addressables UPM包

Spine Addressables插件通过集成Unity Addressables系统, 为Spine-Unity运行时提供了懒加载texture的支持.

该模块可自动执行所有必要步骤, 可自动将texture替换为低分辨率占位图(placeholder), 并在需要时惰性加载高分辨率texture. 在预构建阶段将会把构建输出的texture替换为低分辨率版本, 而后构建阶段则会恢复项目中高分辨率的原始texture. 全程无需额外编码.

安装

Spine Addressables扩展包com.esotericsoftware.spine.addressables依赖于Spine懒加载扩展包com.esotericsoftware.spine.on-demand-loading. 请先安装懒加载包, 再安装Addressables包.

请参考可选扩展UPM包章节了解如何下载安装UPM包, 以及更新扩展UPM包章节了解更新方法.

使用

如需配置将texture替换为低分辨率占位图并自动懒加载高分辨率texture, 只需执行以下步骤:

  1. 将原始的高分辨率Material texture声明为addressable.

  1. 选中SpineAtlasAsset, 右键点击SpineAtlasAsset检查器, 选择Add Addressables Loader.

  1. 这时将生成一个AddressableTextureLoader资产.

  1. 该资产提供配置参数, 并设置在预构建中自动分配的低分辨率占位图.

  1. 正常构建Addressables内容.

此后构建游戏可执行文件时, 运行时将自动初始分配低分辨率占位图, 并懒加载其高分辨率texture.

编辑器预览

请注意, 低分辨率texture仅在游戏构建过程中使用, 在Unity编辑器(包括Play模式)中不可见.

若想在编辑器中预览占位图效果, 可临时分配一张图以作测试: 选择AddressableTextureLoader资产, 点击Testing - Assign Placeholders 便可临时将高分辨率texture替换为低分辨率版本.

你也可以在Play模式下观察高分辨率texture的懒加载过程. 但要注意这一修改仅用于预览, 而不会影响最终构建的可执行文件. 构建时无需手动操作, 系统会自动通过预构建步骤处理texture, 在后构建中再将原始texture恢复.

懒加载UPM包

Atlas textures懒加载的核心功能包含在独立的Spine懒加载扩展包com.esotericsoftware.spine.on-demand-loading中. Spine Addressables插件(com.esotericsoftware.spine.addressables)基于此包构建, 提供了适配于Unity Addressables系统的具体实现.

请参考可选的UPM扩展包一章了解如何下载安装此包, 以及更新UPM扩展包一章了解其更新方法.

你可以通过继承GenericOnDemandTextureLoader并实现抽象方法, 来定制加载方案. 可将AddressablesTextureLoader类的实现作为参考. 若GenericOnDemandTextureLoader无法适配你的需求, 需要进一步定制, 那么可以继承OnDemandTextureLoader并更改实现, 以满足你的项目需求.

下一节: 常见问题(FAQ) 上一节: 时间轴扩展 UPM 软件包