目标
在之前的博客《学习UE4官方第三人称模板中的内容》里,角色已经可以移动和跳跃了。不过,角色的朝向是总是面对移动方向的,而我想尝试让角色朝向面对相机的方向,即角色应该可以“侧向”和“后退”移动。
解决的基本思路是使用混合空间,使用朝向这个变量来混合四个方向的移动动画。下面是实践:
0. 准备资源
首先,我从这个资源包里找到了想要的资源:
(值得一提的是,这个资源包中实现了一个很高级的角色控制逻辑,非常值得学习!)
我导出了其中如下资源到fbx:
-
ALS_N_Run_B后退移动 -
ALS_N_Run_F向前移动 -
ALS_N_Run_LF向左移动 -
ALS_N_Run_RF向右移动
然后导入我的工程(上接《使用UE4动画蒙太奇实现分层动画》):
1. 制作混合空间
在之前的博客《学习UE4官方第三人称模板中的内容》里,也使用了混合空间。不过那是1维的,速度是唯一的维度。考虑到现在多了一个维度:移动朝向。那么混合空间自然就变成了2维的了。(不过仅将移动朝向视为一个维度也是可行的,但需要有额外的逻辑表示速度为0时变为“站立”,而且这样子是没法区别行走和跑步的)
1.1 创建
取名为BlendDirection_Run
1.2 设置
设定横向维度为Direction表示移动的方向,范围从-180度到180度。
将动画序列放到对应的位置:
可预览如下:
2. 动画蓝图的 AnimGraph
2.1 创建“朝向的模式”枚举类
我想让角色可以朝向相机,但是又不想将之前的逻辑都移除,因此我想能够在运行时随时切换两种“朝向的模式”:
- 朝向移动方向
- 朝向相机方向
为此,我建立一个枚举类:
并给予了两个枚举值:FaceMoveDirection和FaceCameraDirection。
2.2 编辑AnimGraph
添加两个变量,分别表示朝向模式与移动方向:
修改MyStateMachine/OnTheGround中的逻辑如下:
基本上,就是使用FaceMode来决定播放哪个混合空间。BlendDirection_Run也需要传递给它MoveDirection的值。
3. 角色蓝图中切换朝向模式
先绑定一个操作映射:
在角色蓝图中增加变量:
在角色蓝图中实现如下逻辑:
基本上,就是在按下ToggleFaceMode按键时,切换MyFaceMode的值。另外,还需要重新设定CharacterMovement组件中的Orient Rotation to Movement和Use Controller Desired Rotation的值。
4. 动画蓝图的 事件图表
在事件图表中加入设置移动方向和朝向模式的逻辑:
其中,计算移动方向时的逻辑是:
使用GetActorRotation得到旋转,使用GetVelocity得到速度,将二者作为参数使用Calculate Direction来得到想要的移动方向的值。