本文于2022-03-23译自官方的Spine-Unity 3.7 to 3.8 Upgrade Guide, 由作者@"Harald"#7956授权翻译, 本译本随官方文档更新.
This Guide was translated from Spine-Unity 3.7 to 3.8 Upgrade Guide, authorized by the writer @"Harald"#7956 at 2022-03-23.Update simultaneously with original post.
重导出skeleton数据
注意: 从Spine 3.7导出的Json和二进制skeleton数据文件无法被Spine-Unity 3.8运行时读取!
Skeleton数据文件应使用Spine 3.8重新导出.
如果你项目很多, 我们建议你自动化项目文件的导出:
导出 - Spine用户指南: 命令行
这里有一个脚本示例, 用于导出所有Spine示例项目并创建texture atlass:
spine-runtimes/export.sh at 3.8
从Spine-Unity 3.7升级至3.8的建议步骤:
以防万一, 先创建一个3.7版项目的备份.
关闭所有打开的场景并创建一个新的空白场景, 且不选中任何对象. 这是为了确保没有活动的Spine对象.
记下对Spine-Unity运行时所做的全部自定义修改. 把这些修改做个备份.
删除旧的"Spine"和"Spine Examples"文件夹.
关闭项目和Unity.
用重新导出的3.8版的skeleton资产替换3.7版本旧资产.
重新打开Unity和项目.
导入最新的Spine-Unity 3.8 unitypackage.
调整代码以适应3.8 API改动
关于API的主要更改, 请参见Changelog的C#
和Unity
部分
spine-runtimes/CHANGELOG.md at 3.8
某些方法在3.8版中已更名或被替换.
如果你在代码中因为使用已更名或已移除的方法而收到编译错误, 执行以下检查步骤将有助于快速修复代码兼容性问题:
用Skin.SetAttachment()
替换Skin.AddAttachment()
用Skin.GetAttachments(int slotIndex, List<SkinEntry> attachments)
合并方法替换Skin.FindAttachmentsForSlot()
和Skin.FindNamesForSlot()
// replace this code:
List<Attachment> attachments = new List<Attachment>();
List<string> names = new List<string>();
skin.FindAttachmentsForSlot(slot, attachments);
skin.FindNamesForSlot(slot, names);
string name = names[index];
string attachment = attachments[index];
// with this code:
List<Skin.SkinEntry> entries = new List<Skin.SkinEntry>();
skin.GetAttachments(slot, entries);
string name = entries[index].Name;
string attachment = entries[index].Attachment;
PoseSkeleton()
和PoseWithAnimation()
扩展方法被移除. 作为替代, 你可以使用AnimationState.ClearTrack(0);
然后是跟一句var entry = AnimationState.SetAnimation(0, animation, loop); entry.TrackTime = time
来实现相同逻辑.
用Attachment.Copy()
替换Attachment.GetClone()
, 用MeshAttachment.NewLinkedMesh()
替换MeshAttachment.GetLinkedClone()
.
用Attachment.GetCopy(bool cloneMeshesAsLinked)
替换Attachment.GetClone(bool cloneMeshesAsLinked)
SkeletonDataAsset.atlasAssets
现在是基类AtlasAssetBase
而非SpineAtlasAsset
的数组了, 它用的是IEnumerable<> Materials
而非List<> materials
. 所以应使用atlasAsset.Materials.First()
替换任何用atlasAsset.materials[0]
来访问Materials的代码, 并顶部的命名空间中添加using System.Linq;
声明.
用using Spine.Unity.Modules.AttachmentTools;
替换using Spine.Unity.AttachmentTools;
声明. 当文件中已经有using Spine.Unity.Modules;
声明时, 可以移除这句using Spine.Unity;
.
完整的变更列表请参见spine-runtimes/CHANGELOG.md at 3.8.
时间轴组件已被移至独立的UPM(Unity Package Manager)包中
更多信息请参见changelog:
spine-runtimes/CHANGELOG.md at 3.8
默认值变更
SkeletonMecanim
的Layer Mix Mode
现在默认为MixMode.MixNext
而非MixMode.MixAlways
. 在创建新SkeletonMecanim
实例时请考虑这点, 该改动不影响现有实例. 注意: 在以前默认值是MixMode.SpineStyle
的, MixMode.SpineStyle
现已更名为MixMode.Hard
.
BlendModeMaterialAsset
和其实例Default BlendModeMaterials.asset
现在默认将Apply Additive Material
置为true
, 以便默认应用所有blend模式.
你可以从中文下载页面下载新unitypackages: Spine Unity下载页面
如果你发现有什么解释不清的地方, 或者在指南中有什么内容缺失, 请毫不犹豫地在此跟帖来痛陈高见, 这样我们才能让大家的升级之旅尽可能的更无脑&无痛.
希望诸位喜欢新版本的Spine, 并用它创造出更多令人惊叹的游戏佳作! 🙂