所以这里的答案是尝试使用通过能力任务设置的RootMotionSource系统——而不是使用UAbilityTask_MoveToLocation,试试UAbilityTask_ApplyRootMotionMoveToForce。这是 UAbilityTask_MoveToLocation 的同步、预测/校正版本。
(2)获取鼠标位置与玩家位置 添加一个新函数“Move To Location”并编辑如下 (3)simple move to Location—使角色移动、VectorLength—得出三维向量与原点的距离 两个位置相减,得出的三维向量输入到“VectorLength”中输出该点与原点的距离,再判断距离是否大于120,如果是则调用“simple move to Location”使“Self”(...
最后,我们来实现GoToRandomWaypoint函数。同样,我们有几种选择:MoveTo,MoveToActor和MoveToLocation。 我们用最简单的形式——MoveToActor,并且全部使用默认参数。 voidATagController::GoToRandomWaypoint(){MoveToActor(GetRandomWaypoint());} 完成! 使用Controller 既然我们已经造好了“大脑”,是时候把它放到“身体...
在它的蓝图中添加一个Event Receive Execute AI(当Task被激活的时候执行),然后从中拖出节点Move To Location,可以让AI去往一个位置。因为AI是在NavMesh上移动的,所以我们实际上获取的是NavMesh上的一个随机点,通过Get All Actor Of Class(获取指定类的所有Actor),将Actor Class设置为Recast Nav Mesh。这里返回的...
新建自定义事件并命名为“RandomWalk”,调用函数“SimpleMoveToLocation”,此函数中带两个输入参数Controller对象和Goal位置,获取AI角色蓝图里的Controller对象,通过调用Get Controller函数,它会自动返回一个Pawn对象,之前我们在Pawn里用的AIControllerClass就是我们自建的AIC_ThirdpersonCharacter; ...
拖动这个自定义事件的执行引脚,然后搜索“simple move to location”,添加到图表中,其需要两个参数,一个是角色使用的控制器,一个是以向量表示的目标位置。先设置角色使用的控制器,右击搜索“get conroller”,点击后连接至自定义事件;接下来右击搜索“get random reachable point in radius”,点击应用。这个函数有许多...
拖动这个自定义事件的执行引脚,然后搜索“simple move to location”,添加到图表中,其需要两个参数,一个是角色使用的控制器,一个是以向量表示的目标位置。先设置角色使用的控制器,右击搜索“get conroller”,点击后连接至自定义事件;接下来右击搜索“get random reachable point in radius”,点击应用。这个函数有许多...
在UE中分别创建“人工智能”下的“黑板”和“行为树”,“黑板”可以理解为AI的记忆。在黑板中创建向量类型的MoveToLocation键,用于记录小兵移动的目的地。在行为树中添加简单逻辑如图24-4,实现了小兵朝MoveToLocation记录的位置移动,在到达后等待5秒: 图24-4 寻路行为树 ...
运行行为树之后,我们获取到当前游戏编号为0的Pawn角色,把黑板的名为MoveToLocation的键赋值为Pawn的位置。 voidASAIController::BeginPlay(){Super::BeginPlay();RunBehaviorTree(BehaviorTree);APawn*MyPawn=UGameplayStatics::GetPlayerPawn(this,0);if(MyPawn){GetBlackboardComponent()->SetValueAsVector("MoveTo...
新增内容:为MoveToLocation AbilityTask添加了可选的插值曲线,以支持基于每个坐标轴的插值。 新增内容:向GameplayCueInterface中添加了ShouldAcceptGameplayCue()函数,以允许actor在特定情况下从接收到的游戏线索中进行选择。 新增内容:添加了蓝图函数 GetSupportedFullscreenResolutions,它获得所支持的全屏分辨率的列表。 新增...