에디의 우당탕탕 코딩공장

[UE5] Enemy AI Pass Finder

by 인턴 에디

1. Navigation System

1.모듈 추가

언리얼 엔진의 내비게이션 시스템을 사용하기 위해서는 먼저 관련 모듈을 추가해주어야 한다.

"NavigationSystem", "AIModule"  를 AddRage()안에 추가해준다.

 

.Build.cs

public class TPSProject : ModuleRules
{
	public TPSProject(ReadOnlyTargetRules Target) : base(Target)
	{
		PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

		PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput","UMG", "NavigationSystem", "AIModule" });
	}
}

 

2. EnemyFsm 클래스에 AAIController 멤버변수를 추가한다.

.cpp파일의 BeginPlay에서 변수에 컨트롤러를 할당 할 때, ACharacter을 상속받고 있는 Enemy 클래스에서 GetController()함수를 통해 AController*타입의 인스턴스를 가져오고, AAIController*로 캐스팅 한다.

//EnemyFSM.cpp
//BeginPlay()

//Allocate AIController
ai = Cast<AAIController>(me->GetController());

 

3.

NavMeshBoundsVolume을 ViewPort에 드래그앤 드랍으로 추가해준다.
Floor 크기에 맞게 늘려주고 p를 누르면 NavMesh를 시각적으로 확인할 수 있다.

 

플레이어를 가리도록 벽을 늘린 후 플레이해보면 벽을 피해서 플레이어를 쫓아오는 것을 볼 수 있다.


맵이 클 때 적이 너무나도 최적의 경로로 플레이어를 찾아오는 것은 부자연스럽다. 

 

2. Navigation Invoker : AI가 이동하면  그에 따라 갖고 있는 내비게이션 데이터 영역 갱신을 제공해주는 기능.

 

1.  네비게이션 데이터가 Navigation Invoker 기능을 갖고 있는 AI 근처에서 만들어지도록 설정해야한다.

Edit > ProjectSetting > Navigation System

Generate Navigation Only Atound Navigation Invokers 속성을 체크해준다.

2. AI는 계속 움직이는 대상이기 때문에 동적인 업데이트가 필요하다.

Edit > ProjectSetting > Navigation Mesh

Runtime Generation을 Dynaimic으로 바꿔준다.

3. Enemy BP에 Navigation Invoker 컴포넌트 추가하기.

Navigation Invoker 컴포넌트를 추가해주고,
Details에서 다음과 같이 설정한다.

Tile Generation Radius : 내비게이션 인보커 컴포넌트를 소유하고 있는 액터 주위로 Nav Mesh 데이터를 생성할 영역

Tile Removal Radius: 액터 이동 시 기존에 있던 Nav Mesh 데이터를 삭제하기 위한 영역. 지정된 영역을 벗어나면 기존 데이터는 삭제된다.

https://docs.unrealengine.com/5.0/ko/using-navigation-invokers-in-unreal-engine/

 

내비게이션 인보커 사용하기

이 가이드에서는 내비게이션 인보커를 사용하는 방법을 설명합니다.

docs.unrealengine.com

 

블로그의 정보

에디의 우당탕탕 코딩 공장

인턴 에디

활동하기