目录
修改效果对比
问题阐述
通过观察NPC的寻路不管使用 行为树的Move To任务节点 还是 蓝图中的AI移动到节点,在寻路目标点与当前NPC朝向角度存在差距时,都会有明显的旋转突变,速度过快导致角色瞬间转向下个目标点的方向,使得动画十分突兀。即使通过控制台命令Slomo 0.1放慢10倍观察,也十分明显。
因而这一定是对于旋转未做类似Lerp的平滑过渡处理,通过百度发现很难找到想要的答案,于是在UE4 AnswerHub、Google、Unreal Forum、Youtube类似网站寻找国外大牛的解决方案,毕竟国外游戏开发环境好(安利给入坑的小白一条解决问题的方式)。
蓝图解决设置
修改寻路的Character蓝图类下——CharacterMovement组件中——Rotation Settings内的参数。
如你所见,勾选Orient Rotation to Movement,根据提示需要去掉Pawn下默认为true的Use Conroller Rotation Yaw。
大功告成,现在执行你的AI可以看到过渡效果。如果不确定是否有效,可以将Rotation Rate下的Z变换设为0,若NPC不能转向,则说明修改是有效的。
C++解决设置
在你的AI Character类的构造器下,修改如下参数
//Make AI rotate smoothly(avoid snapping)
bUseControllerRotationYaw = false; //prepare for orient rotation to movement
GetCharacterMovement()->bOrientRotationToMovement = true;
float YawRotateRate = 360.f;
GetCharacterMovement()->RotationRate = FRotator(0, 0, YawRotateRate);
注意使用GetCharacterMovement函数时,需要添加下面的头文件
#include "GameFramework/CharacterMovementComponent.h"