Licensing
将 Spine 官方运行时整合到自建应用程序中需要持有 Spine 许可证.
懒加载扩展 UPM 软件包
为何使用懒加载(按需加载)
您的项目可能需要在每个skeleton上使用大量的皮肤和atlas页textures, 但只有小部分需要在启动时加载. 我们注意到, 所有atlas textures均通过SkeletonDataAsset间接引用, 因此会在加载skeleton时将其一并加载. 这与Unity的标准加载行为一致.
为了优化内存占用和App下载体积, 可使用懒加载UPM包在运行时动态加载texture. 它可以与Unity Addressables等组件集成, 仅在应用了皮肤后再下载其对应的高分辨率atlas textures. 该功能以轻微的运行时加载延迟为代价, 减少初始加载体积.
UPM包
Spine-Unity的懒加载功能可通过独立的Unity包管理器(UPM)扩展包获取. 目前提供两种UPM包:
- Addressables UPM包
com.esotericsoftware.spine.addressables
基于Unity Addressables的开箱即用方案. - 懒加载UPM包
com.esotericsoftware.spine.on-demand-loading
实现了懒加载的通用包.
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, 只需执行以下步骤:
- 将原始的高分辨率Material texture声明为addressable.
- 选中
SpineAtlasAsset
, 右键点击SpineAtlasAsset
检查器, 选择Add Addressables Loader
.
- 这时将生成一个
AddressableTextureLoader
资产.
- 该资产提供配置参数, 并设置在预构建中自动分配的低分辨率占位图.
- 正常构建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
并更改实现, 以满足你的项目需求.