Unity中Spine动画的骨骼控制
在本人撰写的《Unity中使用动画状态机控制Spine动画》中介绍了在Unity中使用Animator来控制Spine动画的播放、切换等基本操作,接下来介绍Spine动画在Unity中控制Spine骨骼。
生成骨骼物体
Spine动画资源导入到Unity中后生成了一个物体,此物体不带任何骨骼信息,为了控制骨骼,需进行以下步骤生成骨骼物体,以便进一步操作。
在Spine动画对象的物体的SkeletonMecanim(或者SkeletonAnimation)组件上,展开Advanced选项,点击“Add Skeleton Utility”按钮,此时在同一物体上生成了一个SkeletonUtility组件。
点击SkeletonUtility组件上的“Spawn Hierarchy”按钮。
这里我选择“Follow all bones”选项。
此时在Spine动画对象的物体中生成了一系列子物体,展开root物体即可看到所有的Spine骨骼生成而来的物体。接下来便可在这些物体上进行一些操作。
用程序控制骨骼
Spine动画可以控制骨骼的位置、缩放、旋转等属性,以便实现一些需要程序计算以配合动画表现的效果。
例如:
using Spine.Unity; //引入SkeletonMecanim的命名空间
void Update()
{
//这里使用SkeletonMecanim的方法来控制骨骼
//获取组件引用
SkeletonMecanim skeletonMecanim = GetComponent<SkeletonMecanim>();
//根据名字获取骨骼引用
var bone = skeletonMecanim.Skeleton.FindBone("bone01");
//每帧改变骨骼位置
bone.X += 0.01f;
}
其他骨骼控制的API可在Spine官方文档中查阅。
设置碰撞器
每一个生成的骨骼物体上都有一个SkeletonUtilityBone组件,可以设置参数对动画表现产生影响。同时每个骨骼物体也是一个普通的Unity的GameObeject,可以在上面做添加组件等基本操作。
注意到SkeletonUtilityBone组件上有一项“Bounding Boxes”,此时是无法点击的,因为动画师没有在这里设置边界框。
Spine动画中的边界框是附加到骨骼上的多边形。和其他附件一样,当骨骼变换时,该多边形也会变换。边界框可用于运行时进行撞击检测、创建物理主体、产生粒子效果等等。
动画师在骨骼上添加边界框后,导入到Unity中,即可在相应的骨骼物体的SkeletonUtilityBone组件上看到如下选项:
点击图中框选的按钮即可创建一个带有碰撞器组件的子物体。可以再次微调碰撞器边界,在代码中进行编写碰撞器相关逻辑。