Skip to content

Instantly share code, notes, and snippets.

@dacanizares
Last active October 29, 2023 20:11
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dacanizares/5db9c59281a9c9049bf819acce7e29bc to your computer and use it in GitHub Desktop.
Save dacanizares/5db9c59281a9c9049bf819acce7e29bc to your computer and use it in GitHub Desktop.
Sample AI Controller - GetRandomReachablePointInRadius - UE4
#include "Test/MovementAIController.h"
#include "Runtime/Engine/Classes/Kismet/GameplayStatics.h"
#include "AI/NavigationSystemBase.h"
#include "NavigationSystem.h"
void AMovementAIController::BeginPlay()
{
Super::BeginPlay();
GoToRandomWaypoint();
}
void AMovementAIController::GoToRandomWaypoint()
{
FVector Result;
if (GetRandomPointInRadius(GetPawn()->GetActorLocation(), 600, Result)) {
MoveToLocation(Result);
}
}
bool AMovementAIController::GetRandomPointInRadius(const FVector& Origin, float Radius, FVector& OutResult)
{
UNavigationSystemV1* NavSys = FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld());
if (!NavSys)
{
return false;
}
FVector Result;
bool bSuccess = NavSys->K2_GetRandomReachablePointInRadius(GetWorld(), Origin, Result, 600);
//Out
OutResult = Result;
return bSuccess;
}
void AMovementAIController::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& Result)
{
Super::OnMoveCompleted(RequestID, Result);
GoToRandomWaypoint();
}
@PrabhjotSembhi
Copy link

Hey I am trying to use and getting this error

CompilerResultsLog: Error: EnemyAIController.cpp.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static bool __cdecl UNavigationSystemV1::K2_GetRandomReachablePointInRadius(class UObject *,struct FVector const &,struct FVector &,float,class ANavigationData *,class TSubclassOf)" (_imp?K2_GetRand
omReachablePointInRadius@UNavigationSystemV1@@SA_NPEAVUObject@@AEBUFVector@@AEAU3@MPEAVANavigationData@@v?$TSubclassOf@VUNavigationQueryFilter@@@@@z) referenced in function "public: bool __cdecl AEnemyAIController::GetRandomPointInRadius(struct FVector const &,float,struct FVector &)" (?GetRandomPointInRadius@AEnemyAIController@@QEAA_NAEBUFVector@@MAEAU2@@z)
CompilerResultsLog: Error: D:\Prabh\unreal\Devlopment\CoolTanks\Binaries\Win64\UE4Editor-CoolTanks-7059.dll : fatal error LNK1120: 2 unresolved externals

@dacanizares
Copy link
Author

dacanizares commented May 15, 2022

Probably you need to add some modules to the PublicDependencyModuleNames of your ProjectName.Build.cs file:

using System.IO;
using UnrealBuildTool;

public class ProjectName: ModuleRules
{
	public ProjectName(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
	
		PublicDependencyModuleNames.AddRange(
			new string[]
			{
				"Core", 
				"CoreUObject", 
				"Engine", 
				"InputCore", 
				"PhysicsCore",
				"AIModule", // ADD
				"NavigationSystem", // ADD
				
			}
		);
		
		....
	}
}

Usually LNK errors are related with that kind of issues.

@PrabhjotSembhi
Copy link

PrabhjotSembhi commented May 15, 2022 via email

@dacanizares
Copy link
Author

No problem!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment