Bootstrap

【UE4 AI】AI Move To寻路转向时解决突变、使得平滑过渡的方法(含C++)

目录

修改效果对比

问题阐述

蓝图解决设置

C++解决设置


修改效果对比

修改前存在突变
修改后存在过渡(参数可调)

问题阐述

通过观察NPC的寻路不管使用 行为树的Move To任务节点 还是 蓝图中的AI移动到节点,在寻路目标点与当前NPC朝向角度存在差距时,都会有明显的旋转突变,速度过快导致角色瞬间转向下个目标点的方向,使得动画十分突兀。即使通过控制台命令Slomo 0.1放慢10倍观察,也十分明显。

为测试编写的简单的AI寻路逻辑(可忽略)

因而这一定是对于旋转未做类似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"

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;