这里面有一个小坑,有一些教程或者资料没有提及:
如果需要使用导航网格相关的内容,则需要在Build.cs中启用相关功能(NavigationSystem):
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "GameplayTasks", "NavigationSystem" });
之后就可以在代码中对导航网格进行操作了:
UNavigationSystemV1* NavSystem = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld());
FNavLocation Result;
bool bSuccess = NavSystem->GetRandomReachablePointInRadius(ControlledPawn->GetActorLocation(), 1000, Result);
//Out
const FVector OutResult = Result.Location;
OwnerController->MoveToLocation(OutResult,-1,false,true,true,true);
可以在任意时刻,比如Tick中,查询当前AI的行为状态,通过调用OwnerController->GetMoveStatus()
来查询,会返回一个枚举,通过实际情况去判断:
namespace EPathFollowingStatus
{
enum Type
{
/** No requests */
Idle,
/** Request with incomplete path, will start after UpdateMove() */
Waiting,
/** Request paused, will continue after ResumeMove() */
Paused,
/** Following path */
Moving,
};
}
近期评论