
【Unity】적 AI의 타겟을 동적으로 전환하는 방법
요약
Unity에서 적 AI의 타겟을 상황에 따라 동적으로 전환하는 구현 방법을 설명합니다. 기본 타겟을 유지하면서 주변의 우선순위가 높은 대상을 감지하고, 대상이 사라지면 다시 원래 타겟으로 복귀하는 메커니즘을 다룹니다.
핵심 포인트
- 기본 타겟과 현재 타겟을 분리하여 관리
- OverlapSphereNonAlloc을 활용한 주변 대상 탐색
- 매 프레임 탐색 대신 코루틴 등을 이용한 최적화 권장
- 타겟 무효화 시 기본 타겟으로의 복귀 로직 구현
서론
적이 항상 플레이어만을 노리는 구현 방식이라면,
아군 유닛이나 장애물을 배치해도 무시되어 버려,
게임성이 단조로워지기 쉽습니다.
이번에는,
"평상시에는 플레이어를 노린다"
"근처에 아군 유닛이 있으면 그쪽을 노린다"
"격파 후에는 원래 목표로 돌아간다"
라는 타겟 전환 처리를 구현합니다.
하고 싶은 것
- 기본 타겟 (default target)을 보유
- 일정 범위 내의 다른 타겟을 감지
- 조건에 맞으면 타겟을 전환
- 전환 대상이 쓰러지면 원래 타겟으로 복귀
예를 들어 다음과 같은 상황을 상정합니다.
- 적은 평상시에는 플레이어를 추적
- 아군 유닛이 근처에 있는 경우에는 그쪽을 공격
- 아군 유닛 격파 후에는 다시 플레이어를 추적
이러한 메커니즘을 만듦으로써,
적의 행동에 변화를 줄 수 있습니다.
구현 방침
defaultTarget을 보유currentTarget을 현재의 공격 대상으로 설정- 일정 범위 내의 후보를 탐색
- 후보가 있으면
currentTarget을 교체 - 후보가 무효가 되면
defaultTarget으로 복귀
구현 예시
이번에는 다음과 같은 흐름으로 타겟을 전환하고 있습니다.
- 현재 타겟이 유효한지 확인
- 무효라면 기본 타겟으로 복귀
- 주변의 타겟 후보를 검색
- 더 우선순위가 높은 대상을 발견하면 전환
주변의 타겟 후보는
OverlapSphereNonAlloc을 이용하여 주변 대상을 취득하고,
가장 거리가 가까운 오브젝트를 선택하고 있습니다.
[SerializeField] private GameObject defaultTarget;
[SerializeField] private GameObject currentTarget;
private void Update()
...
참고로, 샘플에서는 이해를 돕기 위해 Update() 내에서 탐색하고 있지만,
실제 구현 시에는 일정 간격으로 검색하는 것이 부하를 줄일 수 있습니다.
구현 시 주의점
-
매 프레임 탐색하면 무거워지기 쉬움
-
Coroutine(코루틴)이나 일정 간격 업데이트도 검토할 것
-
우선순위를 정해둘 것
-
쓰러진 대상을 계속 참조하지 말 것
-
대상이 없어졌을 때의 갱신 처리가 필요
요약
적의 타겟을 고정하지 않고 상황에 따라 전환할 수 있게 만들면,
게임다운 심리전(駆け引き)을 만들기 쉬워집니다.
이번처럼 기본 타겟을 보유하고 있으면,
일시적인 타겟 변경과 복귀 처리도 비교적 심플하게 구현할 수 있습니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기