U3L16-2-c——Spine骨骼动画代码相关

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Spine.Unity                                            //Spine代码相关命名空间
SkeletonAnimation //Spine骨骼动画类
skeletonAnimation.loop //Spine骨骼动画的循环属性
skeletonAnimation.AnimationName //Spine骨骼动画的动画名
skeletonAnimation.AnimationState.SetAnimation() //立刻播放某个动画的方法
skeletonAnimation.AnimationState.AddAnimation() //队列播放某个动画的方法
skeletonAnimation.skeleton.ScaleX //X轴方向缩放,可以用于翻转
skeletonAnimation.skeleton.ScaleY //Y轴方向缩放,可以用于翻转
skeletonAnimation.AnimationState.Start //动画开始播放时执行的事件
skeletonAnimation.AnimationState.End //动画中断或者清除时的事件
skeletonAnimation.AnimationState.Complete //动画播放完成的事件
skeletonAnimation.AnimationState.Event //做动画时添加的自定义事件
[SpineAnimation] //动画特性,使用该特性的成员变量,在inspector窗口上可以直接选择动画
[SpineBone] //骨骼特性,使用该特性的成员变量,在inspector窗口上可以直接选择骨骼或者IK点
[SpineSlot] //插件特性,使用该特性的成员变量,在inspector窗口上可以直接选择插槽
[SpineAttachment] //附件特性,使用该特性的成员变量,在inspector窗口上可以直接选择附件
skeletonAnimation.skeleton.FindBone() //获取骨骼方法
skeletonAnimation.skeleton.SetAttachment() //获取插槽附件方法

动画播放

引用 Spine代码相关 需要先引入命名空间 Spine.Unity

1
2
3
4
5
6
7
8
9
10
11
12
using Spine.Unity;
using UnityEngine;

public class Lesson45 : MonoBehaviour
{
private SkeletonAnimation skeletonAnimation;

void Start()
{
skeletonAnimation = GetComponent<SkeletonAnimation>();
}
}

直接改变SkeletonAnimation中参数

注意!一定要先设置循环,再修改动画名,循环设置才会成功!

1
2
skeletonAnimation.loop = true;
skeletonAnimation.AnimationName = "jump";

使用SkeletonAnimation中动画状态改变的函数

立刻播放

第一个参数是索引,一般是0;第二个参数是动画名;第三个参数是是否循环

1
skeletonAnimation.AnimationState.SetAnimation(0, "jump", false);

队列播放

顾名思义,就是等待上一个动画播放完成后再播放动画

第四个参数是延迟时间

1
skeletonAnimation.AnimationState.AddAnimation(0, "walk", true, 0);

转向

1是正向,-1就是负向,ScaleY同理

1
2
skeletonAnimation.skeleton.ScaleX = -1;
skeletonAnimation.skeleton.ScaleY = 1;

动画事件

以下的每个事件添加的函数都需要一个参数t

动画开始播放

1
2
3
4
skeletonAnimation.AnimationState.Start += (t) =>
{
print(skeletonAnimation.AnimationName + "动画开始播放");
};

动画被中断或者清除

1
2
3
4
skeletonAnimation.AnimationState.End += (t) =>
{
print(skeletonAnimation.AnimationName + "动画中断或者清除");
};

播放完成

1
2
3
4
skeletonAnimation.AnimationState.Complete += (t) =>
{
print(skeletonAnimation.AnimationName + "动画播放完成");
};

做动画时添加的自定义事件

自定义事件的Spine动画制作时添加的事件,我们可以在第二个参数里使用它

1
2
3
4
skeletonAnimation.AnimationState.Event += (t, e) =>
{
print(skeletonAnimation.AnimationName + "自定义事件");
};

便携特性

动画特性

用来申明成员变量,使用该特性的成员变量,在inspector窗口上可以直接选择动画,得到该动画的名字,而无需再手动写字符串

这样,在使用一些需要传入 动画的名字字符串 作为参数的方法里,可以直接使用这个成员变量,而不用再写字符串

1
2
3
4
5
6
7
[SpineAnimation]
public string jumpName;

void Start()
{
skeletonAnimation.AnimationState.SetAnimation(0, jumpName, false);
}

骨骼特性

用来申明成员变量,使用该特性的成员变量,在inspector窗口上可以直接选择骨骼或者IK点,得到该骨骼或者IK点的名字,而无需再手动写字符串

这样,在使用一些需要传入 骨骼或者IK点的名字字符串 作为参数的方法里,可以直接使用这个成员变量,而不用再写字符串

1
2
[SpineBone]
public string BoneName;

插槽特性

用来申明成员变量,使用该特性的成员变量,在inspector窗口上可以直接选择插槽,得到该插槽的名字,而无需再手动写字符串

这样,在使用一些需要传入 插槽的名字字符串 作为参数的方法里,可以直接使用这个成员变量,而不用再写字符串

1
2
[SpineSlot]
public string slotName;

附件特性

用来申明成员变量,使用该特性的成员变量,在inspector窗口上可以直接选择附件,得到该附件的名字,而无需再手动写字符串

这样,在使用一些需要传入 附件的名字字符串 作为参数的方法里,可以直接使用这个成员变量,而不用再写字符串

1
2
[SpineAttachment]
public string attachmentName;

获取骨骼、设置插槽附件

获取骨骼

可以用这个调整骨骼的各种信息

1
Bone bone = skeletonAnimation.skeleton.FindBone(boneName);

设置插槽附件

第一个参数是 要设置附件的插槽,第二个参数是 要设置的附件,用这个可以实现换装

1
skeletonAnimation.skeleton.SetAttachment(slotName, attachmentName);

在UI中使用

涉及一部分UGUI的内容

拖入Spine骨骼动画时选择UI,然后拖到Canvas对象下,即可显示出来,并可以使用Rect Transform