欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Unity中Spine动画的骨骼控制

程序员文章站 2022-07-12 22:58:31
...

在本人撰写的《Unity中使用动画状态机控制Spine动画》中介绍了在Unity中使用Animator来控制Spine动画的播放、切换等基本操作,接下来介绍Spine动画在Unity中控制Spine骨骼。

生成骨骼物体

Spine动画资源导入到Unity中后生成了一个物体,此物体不带任何骨骼信息,为了控制骨骼,需进行以下步骤生成骨骼物体,以便进一步操作。

在Spine动画对象的物体的SkeletonMecanim(或者SkeletonAnimation)组件上,展开Advanced选项,点击“Add Skeleton Utility”按钮,此时在同一物体上生成了一个SkeletonUtility组件。

Unity中Spine动画的骨骼控制

点击SkeletonUtility组件上的“Spawn Hierarchy”按钮。
Unity中Spine动画的骨骼控制

这里我选择“Follow all bones”选项。

 Unity中Spine动画的骨骼控制

 

此时在Spine动画对象的物体中生成了一系列子物体,展开root物体即可看到所有的Spine骨骼生成而来的物体。接下来便可在这些物体上进行一些操作。
Unity中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,可以在上面做添加组件等基本操作。

Unity中Spine动画的骨骼控制

注意到SkeletonUtilityBone组件上有一项“Bounding Boxes”,此时是无法点击的,因为动画师没有在这里设置边界框。

Spine动画中的边界框是附加到骨骼上的多边形。和其他附件一样,当骨骼变换时,该多边形也会变换。边界框可用于运行时进行撞击检测、创建物理主体、产生粒子效果等等。

动画师在骨骼上添加边界框后,导入到Unity中,即可在相应的骨骼物体的SkeletonUtilityBone组件上看到如下选项:

Unity中Spine动画的骨骼控制

点击图中框选的按钮即可创建一个带有碰撞器组件的子物体。可以再次微调碰撞器边界,在代码中进行编写碰撞器相关逻辑。