상세 컨텐츠

본문 제목

AI Car Navigation- Easy Car AI 어셋 활용법

Unreal

by Real_Go 2023. 8. 16. 01:30

본문

AI Car Navigation 은 Character Movement 나 Floating pawn movement 를 기반으로 Move To Location 만 땡 치면 끝나는 
Unreal 기본 Navigation 시스템과는 달리 Vehicle Movement Component 를 고려해서 Throttle 값과 Steering 값을 조절해야한다는 측면에서 상당히 다루기 어렵다. 

4.27과 5.1 모두 다뤄본 결과 반드시 사기 피해 안당하도록 사지 말아야 할 이놈 

Vehicle AI Plugin

정작 되는게 하나도 없다. 다른 맵, 다른 차량으로 적용할 때 응~ 안먹혀가 남발하는 이놈

게다가 Plugin 형태라서 OS가 다르면 또 빌드를 쳐 해야하는 짜증나는 경우도 발생하고 버전마다 다르게 만들어놨고 

여러모로 나한테 2개월의 시간낭비를 안겨준 녀석이다. 

 

간단하게 Navigation 시스템을 이용하면서 Content안의 것만 복붙하면 되므로 다른 맵, 다른 차량에의 적용이 훨씬 용이한 
Easy Car AI 를 소개 및 사용법을 공유하고자 한다. 

Easy Car AI

이녀석은 일단 싸고 호환성이 막강하다. 그리고 적용이 용이하다. 

내껄 활용한 예는 다음과 같다.

 

먼저 Content/Car AI/BluePrints/Vehicles/DefaultSedan 아래 있는 BP_DefaultSedanChaos 에 대해서 Mesh 및 ABP 를
내가 쓰는 차종에 맞춰 바꿔준다.  

그리고 Vehicle Movement Component 에서 Wheel Setting 등등을 내 차종에 맞게 바꿔준다.

이러면 차량 동역학은 완성. 

 

이제 환경 구성이다. Car AI 폴더내에 있는 Demo Map은 Level blueprint를 짜놔서 제어를 하도록 했다. 

크게 Follow Player/Follow Location (마우스 클릭 포인트)/Follow Spline 인데 나는 Follow Location 만 먹히는 걸 보고 싶으므로 새로운 맵에서 작업을 하도록 하겠다. 

새로운 맵에 필요한 것은 NavMeshBoundsVolume(언리얼 기본 액터배치-볼륨), RecastNavMesh(언리얼 기본 액터배치-볼륨), BP_CarAI_TargetManager(Car AI/Blueprints/Gameplay), BP_DefaultSedanChaos(Car AI/Blueprints/Vehicles/DefaultSedan), point Actor(내가 만든거), BP_CarAI_NavMesh(Car AI/Blueprints/Gameplay 에 있는데  BP_DefaultSedanChaos 의 AIControllerClass에 할당해줘야한다) 이다.

하나씩 수정작업한 내역을 보자면 

1. NavMeshBoundsVolume 
  > 맵에 적당히 펼쳐준다 p를 눌러 확인한다.

2. BP_CarAI_TargetManager

>이벤트 그래프에서는 실시간 Update가 되도록 위와같이 추가한다.

그리고나서 GetTargetFor 함수에 대해서 Switch 문을 파!괴!하고 다이렉트로 TargetLocation을 꽂아준다.

3. BP_CarAI_NavMesh

> 복잡하게 있는거 다 끄집어내고 TargetManager의 Get TargetFor함수가 반환하는 Target Location값이 
GetNavigationEndPoint 함수에서 반환하는 EPoint로 들어가도록 연결해버린다. 

 

차의 속도가 너무 빠르다 싶으면 AccelThrottle값에 Clamp를 줘버려서 강제로 좀 느린대신 안정적으로 이동하도록 할 수 있다. 아래 그림 참고 (Get Auto Acceleration에서의 작업)

4. BP_DefaultSedanChaos 

> AIControllerClass를 위에거를 지정해준다. 

자 이제 장애물도 좀 배치해보고 시행해봅시다 

 

완성! AI Move가 되고 경로 외의 장소에 NavMeshModifier로 Cost가 높은 걸 배치하니까 딱 피해서 가긴하더라 

 

관련글 더보기