군집과 회피 기초
21강. 군집과 회피 기초
1. 이번 강의에서 해결할 문제
여러 적이 같은 플레이어 위치를 향해 이동하면서 한 점에 겹치고 서로 밀어냅니다. 정적 장애물 경로와 움직이는 이웃 회피를 구분합니다.
2. 학습 목표
3. 핵심 개념
Pathfinding은 벽과 지형을 피해 목적지까지 큰 경로를 찾습니다. Avoidance는 경로를 따라 이동하는 동안 다른 움직이는 Agent와 충돌하지 않을 속도를 고릅니다.
Unreal Navigation은 RVO와 Detour Crowd 계열 회피를 제공합니다. 공식 Using Avoidance 문서는 두 방식의 특징을 설명합니다. 두 시스템을 근거 없이 동시에 켜지 말고 프로젝트 규모와 Controller 구조에 맞춰 하나부터 검증합니다.
4. 단계별 실습
C++ · 파일 경로: Source/TopDownSurvival/Enemies/MathAIEnemyCharacter.cpp · 생성자
#include "GameFramework/CharacterMovementComponent.h"
AMathAIEnemyCharacter::AMathAIEnemyCharacter()
{
UCharacterMovementComponent* Movement = GetCharacterMovement();
Movement->bUseRVOAvoidance = true;
Movement->AvoidanceConsiderationRadius = 250.0f;
Movement->AvoidanceWeight = 0.5f;
}
Unreal Editor 작업
- 넓은 NavMesh 바닥 중앙에 플레이어를 둡니다.
- 적 5, 20, 50개를 원형으로 배치해 동시에 추적시킵니다.
- RVO Off와 On에서 겹침, 진동, 도착 시간과 Game Thread 시간을 비교합니다.
- Capsule Radius와 Acceptance Radius가 너무 작지 않은지 확인합니다.
선택적 수동 Separation은 가까운 이웃과 반대 방향 벡터를 합하는 방식이지만, 모든 적 쌍을 매 Tick 검사하면 O(n²) 비용이 됩니다. 먼저 엔진 회피와 Collision 설정을 사용하고 실제 요구가 남을 때 공간 분할과 제한된 주기를 설계합니다.
5. 코드와 수학·AI가 동작하는 이유
RVO는 이웃의 현재 속도 벡터를 고려해 충돌을 줄이는 대안 속도를 선택합니다. NavMesh가 정적 경로를 제공하고 RVO가 국소 속도를 조정합니다. Consideration Radius가 크면 더 많은 이웃을 고려해 품질과 비용이 함께 증가할 수 있습니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
군집과 회피 기초 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.