먼저 BP_Player 타입의 Target 변수를 만들고 시작할 때 GetPlayerCharacter를 캐스트 해서 변수를 저장한다.
타겟을 향해 이동하는 함수는 Move to Location을 사용한다.
타겟을 향해 이동할 때 타겟의 방향으로 회전하면서 이동하기 때문에 따로 회전하는 기능은 추가할 필요가 없다.
저장해 놓은 Target에서 위치를 가져와서 Move to Location의 Dest, 목표로 설정해 준다.
이렇게 만들어 놓은 AI 컨트롤러는 BP_Enemy > Details > Pawn > AI Controller Class에 할당한다.
적 스폰
이제 만들어 놓은 Enemy를 스폰해 본다.
스폰을 어디서 처리할지가 애매했는데 일단 게임의 전반적인 기능을 담당하는 BP_MyGameMode에서 스폰 기능을 구현하기로 한다.
BP_MyGameMode에 Spawn Enemy 함수를 추가한다.
적은 플레이어 위치를 기준으로 일정한 범위 내에서 랜덤 한 위치에 생성되도록 한다.
먼저 플레이어 위치 벡터를 가지고 와서 일정 범위 안에서 랜덤 한 값만큼을 오프셋으로 사용해서 생성될 위치를 정한다.
Random Float in Range를 사용해서 Min ~ Max 범위 안의 값을 오프셋으로 사용한다.
Spawn Actor BP Enemy의 Spawn Transform에 생성한 무작위 위치를 할당하고 class는 BP_Enemy로 설정해 준다.
이제 이 함수를 호출해서 적을 생성하면 된다.
방식은 일정 시간 간격으로 생성되도록 할 것이다.
BP_MyGameMode의 Event Begin Play에서 Set Timer by Event를 호출하고 Custom Event인 EnemySpawnEvent를 만든다. EnemySpawnEvent는 SpawnEnemy를 호출하는 기능만 하며 Set Timer by Event의 Event 파라미터에 등록한다.
Time에 적을 생성할 주기를 정해주는데 일단 3초 간격으로 적이 생성되도록 한다.
그리고 3초마다 계속 생성되도록 Looping은 True로 체크해 준다.
여기까지 진행하고 테스트를 해보는데 적이 플레이어 주변 랜덤한 위치에 생성은 되지만 움직이지 않는다.
Auto Possess AI
BP_Enemy의 디테일 창으로 다시 돌아가서 Pawn 탭의 Auto Possess AI 옵션을 확인한다.
해당 옵션은 기본 값으로 Placed in World로 되어있는데 이 옵션은 미리 맵에 생성된 액터에게만 해당하며 플레이 도중에 생성된 액터는 동작하지 않는다.
각 옵션의 사용법을 알아둔다.
Disabled
AI 컨트롤러가 캐릭터를 자동으로 제어하지 않는다. AI 컨트롤러를 수동으로 할당해한다.
Placed in World
맵에 배치된 AI 캐릭터가 게임 시작 시 AI 컨트롤러에 의해 자동으로 제어된다. 주로 에디터에서 맵에 직접 배치된 AI 캐릭터에 사용된다.
Spawned
게임 도중 스폰된 AI 캐릭터가 AI 컨트롤러에 의해 자동으로 제어된다. 런타임 중에 생성된 AI 캐릭터에 사용된다.
Placed in World or Spawned
맵에 배치된 AI 캐릭터와 게임 도중 스폰된 AI 캐릭터 모두 AI 컨트롤러에 의해 자동으로 제어된다. 모든 상황에서 AI 캐릭터를 자동으로 제어할 때 사용한다.
이 옵션을 적의 배치 방식에 맞는 Spawned로 설정한다.
이제 다시 플레이해 보면 여전히 동작하지 않는다.
NavMeshBoundsVolume
만들어놓은 지형에 AI가 돌아다닐 수 있는 범위를 정해주어야 한다.
해당 범위만큼 내비게이션의 길 찾기 연산에 포함되기 때문에 복잡하고 넓을수록 많은 연산을 차지하게 된다.
Place Actor에서 NavMeshBoundsVolume을 찾아서 레벨에 생성한다. 그리고 AI가 돌아다닐 수 있는 범위만큼 크기와 높이를 조절한다.
범위가 원하는 대로 지정됐는지 확인하려면 플레이하지 않고 뷰포트에서 키보드 'P'를 누르면 지정된 범위만큼 녹색으로 표시가 된다.
이제 진짜로 테스트 플레이를 해본다.
랜덤 한 위치에서 적이 생성되고 생성된 적은 플레이어를 추적하기 시작한다.
추적하는 동안 이동하는 애니메이션이 재생되고 목적지에 도착하면 일반 상태의 애니메이션이 재생된다.
플레이어가 이동하면 변경된 위치를 계속해서 따라가게 된다. 여기까지 원하는 대로 잘 동작하게 되었다.