什么是 Blend Space
混合空间能在两个骨骼动画之间创建过渡动画。混合空间有 1 维混合(Blend Space 1D)和 2 维混合(Blend Space)
一个 Blend Space 1D 的例子
下面以 1 维混合为例,实现一个根据角色速度混合 休闲状态 、 步行状态 和 跑步状态 的动画。
1、新建 ThirdPerson 模板的蓝图工程,在内容浏览器中右键新建 Blend Space 1D 资源,选择骨骼
2、双击打开,此时骨骼是最原始的动作,右下角能看到该骨骼对应的 动画 和 混合空间 。
3、右下角的动画 可以拖动到 左侧的坐标框 内某一跟垂直线上,一维的坐标框水平坐标是从左到右依次增大,二维的混合空间还会使用到垂直坐标。
框中拖动绿色点可以预览绿色点对应的坐标的动画。
如下图将 ThirPersonIdle 拖到了坐标 0 的位置,骨骼的动画就变成了休闲状态。
4、坐标的属性由左侧栏的 AxisSettings 设置,打开时默认属性值如下
5、把这里的属性做一下修改,将 Name 属性改为 Speed ,也就是水平的坐标,表示角色移动的速度 ,MaximumAxisValue 改为 300,表示 只关心 300 速度之前的动画混合,300 之后都是跑的动作就不管了,Number of Grid Divisions 改为 3 ,将坐标区间划分为 *3* 段。这些值都可以根据自己的需求修改。
6、将 休闲状态动画(ThirdPersonIdle)、步行状态动画(ThirdPersonWalk)和 跑步状态动画 (ThirdPersonRun)分别拖入坐标框内,按顺序放在合适的位置, BlendSamples 会显示相应的动画,并有可设置的值,如 Speed 设置每个动作对应的速度,这个值要使角色的运动看起来协调,比如跑步的动作,如果速度设置的太小,就会出现角色脚跑的很快但向前移动的很慢,就像在跑步机上一样,如果这个速度设置的太大,就会向前移动的很快,像向前飘的一样,所以要设置一个合适的值。
7、最后的结果如下,从左到右拖动坐标框中的绿点,预览骨骼动画的变化效果
混合空间可以在动画蓝图中引用,Speed 作为混合空间的输入参数,具体说明见下一节。
在蓝图中如何引用混合空间
1、新建动画蓝图 ,ParentClass 选 AnimInstance,TargetSkeleton 选择第三人称角色骨骼 UE4_Mannequin_Skeleton
双击打开蓝图,打开后如下图,FinalAnimationPose 为最终的动画
2、新建一个变量 Speed ,用于保存角色当前的速度,并作为 BlendSpace 的输入
3、在事件图表(EventGraph)下的 BlueprintUpdateAnimation 事件添加蓝图代码,将角色当前的速度赋值给 Speed
4、在动画图表(AnimGraph)中右键搜索上面的 BlendSpace 并添加,或者从右下角拖入,将 Speed 连接到混合空间的输入,将 BlendSpace 的输出连接到 FinalAnimationPose 的 Result 引脚。
5、到此动画蓝图完成了,新建一个角色,Skeletal Mesh 选择第三人称角色的骨骼,AnimClass 选择刚才创建的动画蓝图
6、在角色后面合适位置添加一个相机
7、在蓝图图表中添加 MoveForward 和 MoveRight 事件,蓝图代码如下
8、这样就可以通过 WASD 按钮控制角色移动了,角色的移动动画按照行走的速度进行切换,可以通过下面设置项设置角色最大步行速度
如果想看角色从慢到快的动作变化可以在关卡蓝图中使用下面的蓝图进行测试,每按下一次空格键角色的速度就增加 10