一、Spine资源导入Unity
Spine导出的三个核心文件:
.json
- 存储骨骼动画数据.png
- 图集纹理.atlas.txt
- 图集位置信息
导入Unity后自动生成:
_Atlas
材质.atlas.txt
的引用配置Material
材质文件skeletonData
配置(关联json和Atlas)
二、创建Spine动画对象
将骨骼动画拖入场景时有三个选项:
- Spine原生动画系统(SkeletonAnimation)
- Spine UI动画系统
- Unity Animator系统
三、Spine原生动画系统(SkeletonAnimation)
基础使用
private SkeletonAnimation sa;
void Start() {
sa = GetComponent<SkeletonAnimation>();
}
动画控制API
- 简单播放:
sa.loop = false;
sa.AnimationName = "jump";
- 高级控制:
// 参数:轨道索引(默认0), 动画名, 是否循环
sa.AnimationState.SetAnimation(0, "jump", false);
- 转向控制:
sa.AnimationState.ScaleX = -1; // 水平翻转
动画事件
// 动画开始
sa.AnimationState.Start += (trackEntry) => {};
// 动画中断/清除
sa.AnimationState.End += (trackEntry) => {};
// 动画完成
sa.AnimationState.Complete += (trackEntry) => {};
// 自定义事件(Spine软件中添加)
sa.AnimationState.Event += (trackEntry, event) => {};
四、Spine便捷特性
[SpineAnimation] // 快速选择动画
public string animationName;
[SpineBone] // 快速选择骨骼
public string boneName;
[SpineSlot] // 快速选择插槽
public string slotName;
[SpineAttachment] // 快速选择附件
public string attachmentName;
五、高级操作
骨骼操作
// 获取骨骼
Bone bone = sa.Skeleton.FindBone("boneName");
// 设置骨骼位置
bone.X = 10f;
bone.Y = 5f;
插槽和附件操作
// 获取插槽
Slot slot = sa.Skeleton.FindSlot("slotName");
// 更换附件
sa.Skeleton.SetAttachment("slotName", "newAttachmentName");
多轨道动画
// 在轨道1播放待机动画(循环)
sa.AnimationState.SetAnimation(1, "idle", true);
// 在轨道0播放攻击动画(不循环)
sa.AnimationState.SetAnimation(0, "attack", false);
优化建议
- 缓存频繁访问的动画和骨骼引用
- 使用对象池管理频繁创建的Spine对象
- 对移动平台注意图集大小和材质优化
- 使用SkeletonGraphic替代SkeletonAnimation用于UI动
遇到的问题
创建对象,颜色变浅并且有一点透明
这是因为在图集里面没有勾选sRPG(color Texture),如果没有勾选会认为你的图片在Spine中没有进行纹理预处理,Unity会再进行一次处理,导致颜色出现偏差