07 적 AI·길찾기 - jes79/Unity-AI-Glossary-Playground GitHub Wiki
07 적 AI·길찾기
적 행동은 '상태 이름 + 전환 조건'으로 요청하세요. 예: 순찰 → (10m 안에 발견) → 추격 → (2m 이내) → 공격.
씬 12개 · 폴더 Assets/00_Scenes/07_EnemyAI
| 번호 | 용어 | 쉽게 말하면 | 씬에서 보여 주는 것 | 구현 방식 |
|---|---|---|---|---|
| 0701 | FSM (유한 상태 기계) | 상태를 정해두고 조건에 따라 전환 | Idle/Patrol/Chase/Attack/Dead FSM, 10m 발견·2m 공격 원 표시 | 런타임 데모 |
| 0702 | 비헤이비어 트리 (Behavior Tree) | 복잡한 AI를 나무 구조로 판단 | Selector/Sequence 보스 트리 시각화, HP 50% 이하 패턴 변경 | 런타임 데모 |
| 0703 | NavMesh / NavMesh Agent | 자동 길찾기 지형 / 길찾는 주체 | NavMeshSurface 굽기 + NavMeshAgent가 미로에서 플레이어 추적 | 런타임 데모 |
| 0704 | NavMesh Obstacle / Off-Mesh Link | 움직이는 장애물 / 점프·사다리 연결 | NavMesh Obstacle Carve 비교 + NavMeshLink 점프 | 런타임 데모 |
| 0705 | 웨이포인트 순찰 (Patrol) | 지정 지점을 돌아다님 | 웨이포인트 4개 순찰, 지점마다 2초 대기 | 런타임 데모 |
| 0706 | 시야 판정 (Field of View) | 시야각·거리·가림 체크 | 시야각 90°·10m, 벽에 가리면 못 봄, 시야 부채꼴 메시 | 런타임 데모 |
| 0707 | 어그로 (Aggro) / 위협 수준 | 누구를 공격할지 우선순위 | 데미지 누적 위협 수준으로 공격 대상 선택, 도발 | 런타임 데모 |
| 0708 | 스포너 (Spawner) / 웨이브 | 적 생성기 / 단계별 등장 | 웨이브마다 적 5마리씩 증가 | 런타임 데모 |
| 0709 | 보스 패턴 / 페이즈 | 공격 패턴 순환, 체력 구간별 변화 | 패턴 3개 랜덤 반복, HP 30% 이하 2페이즈 | 런타임 데모 |
| 0710 | 플로킹 (Flocking) / Boids | 무리지어 움직임 | 물고기 80마리 Boids, 분리/정렬/응집 개별 토글 | 런타임 데모 |
| 0711 | A* (A스타) / 타일 길찾기 | 격자 맵 최단 경로 | Tilemap 격자 A* 길찾기, 다익스트라 비교 | 런타임 데모 |
| 0712 | 투사체 예측 조준 | 움직이는 대상을 미리 조준 | 이동 속도 고려 예측 사격 vs 현재 위치 조준 명중률 | 런타임 데모 |
항목별 상세
0701
FSM (유한 상태 기계) — 상태를 정해두고 조건에 따라 전환
요청 예문: "적 AI를 FSM으로 만들어줘: Idle, Patrol, Chase, Attack, Dead."
- 씬:
Assets/00_Scenes/07_EnemyAI/0701_FSM.unity - 핵심 스크립트:
FsmEnemy - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0701_FSM.cs - 구현 방식: 런타임 데모
- 개념: 적의 행동을 Idle·Patrol·Chase·Attack 처럼 몇 개 상태로 나누고, 조건이 맞을 때만 다른 상태로 넘기는 구조. 대부분의 게임 적 AI 는 이것만으로 충분하다.
- 씬에서 보여 주는 것: Idle/Patrol/Chase/Attack/Dead FSM, 10m 발견·2m 공격 원 표시
- 확인 포인트: 플레이어가 10m 안에 들어가면 Chase, 2m 안이면 Attack 으로 바뀌는지 패널의 현재 상태 표시로 보세요. 바닥의 두 원이 그 거리입니다.
0702
비헤이비어 트리 (Behavior Tree) — 복잡한 AI를 나무 구조로 판단
요청 예문: "보스 AI를 Behavior Tree 구조로 설계해줘. 체력 50% 이하면 패턴 변경."
- 씬:
Assets/00_Scenes/07_EnemyAI/0702_BehaviorTree.unity - 핵심 스크립트:
BehaviorTree, BossBehaviorTree - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0702_BehaviorTree.cs - 구현 방식: 런타임 데모
- 개념: 조건과 행동을 나무 구조(Selector·Sequence)로 묶어 우선순위대로 판단하는 AI 설계. 상태가 많아지고 조건이 겹칠 때 FSM 보다 관리하기 쉽다.
- 씬에서 보여 주는 것: Selector/Sequence 보스 트리 시각화, HP 50% 이하 패턴 변경
- 확인 포인트: 보스 트리 시각화에서 어느 노드가 평가되고 어디서 멈추는지 보세요. HP 를 50% 아래로 내리면 트리의 다른 가지가 선택되어 패턴이 바뀝니다.
0703
NavMesh / NavMesh Agent — 자동 길찾기 지형 / 길찾는 주체
요청 예문: "AI Navigation 패키지로 NavMesh를 굽고 적이 플레이어를 추적하게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0703_NavMeshAgent.unity - 핵심 스크립트:
NavChaser - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0703_NavMeshAgent.cs - 구현 방식: 런타임 데모
- 개념: 걸어 다닐 수 있는 영역을 미리 구워 둔 데이터가 NavMesh, 그 위에서 경로를 찾아 움직이는 컴포넌트가 NavMesh Agent. 장애물 회피와 경로 계산을 모두 알아서 한다.
- 씬에서 보여 주는 것: NavMeshSurface 굽기 + NavMeshAgent가 미로에서 플레이어 추적
- 확인 포인트: 적이 미로의 벽을 돌아 플레이어까지 오는지 보세요. 굽지 않은 영역(NavMesh 바깥)으로는 가지 않고, 경로가 막히면 다른 길을 찾습니다.
0704
NavMesh Obstacle / Off-Mesh Link — 움직이는 장애물 / 점프·사다리 연결
요청 예문: "상자를 NavMesh Obstacle(Carve)로 만들어 적이 피해가게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0704_NavMeshObstacleLink.unity - 핵심 스크립트:
NavObstacleLinkDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0704_NavMeshObstacleLink.cs - 구현 방식: 런타임 데모
- 개념: Obstacle 은 움직이는 장애물로 NavMesh 를 실시간으로 파내고(Carve), Off-Mesh Link 는 떨어진 영역을 점프·사다리로 잇는다. 둘 다 다시 굽지 않고 길을 바꿀 때 쓴다.
- 씬에서 보여 주는 것: NavMesh Obstacle Carve 비교 + NavMeshLink 점프
- 확인 포인트: 움직이는 장애물로 길을 막아 보세요. Carve 를 켜면 적이 돌아가고, 끄면 장애물을 무시하고 밀며 지나갑니다. 끊긴 지형은 Link 로 점프해 건너갑니다.
0705
웨이포인트 순찰 (Patrol) — 지정 지점을 돌아다님
요청 예문: "웨이포인트 4개를 순서대로 순찰하고 각 지점에서 2초 대기하게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0705_WaypointPatrol.unity - 핵심 스크립트:
WaypointPatrol - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0705_WaypointPatrol.cs - 구현 방식: 런타임 데모
- 개념: 정해 둔 지점을 순서대로 돌며 지점마다 잠깐 머무는 행동. 플레이어에게 적의 이동을 예측 가능하게 보여 주어 잠입·회피 플레이를 만든다.
- 씬에서 보여 주는 것: 웨이포인트 4개 순찰, 지점마다 2초 대기
- 확인 포인트: 적이 웨이포인트 4개를 순서대로 돌고 각 지점에서 2초 멈추는지 보세요. 마지막 지점 다음에 처음으로 되돌아가는지도 확인해 보세요.
0706
시야 판정 (Field of View) — 시야각·거리·가림 체크
요청 예문: "시야각 90도, 거리 10m, 벽에 가리면 못 보는 시야 판정을 만들어줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0706_FieldOfView.unity - 핵심 스크립트:
FieldOfView - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0706_FieldOfView.cs - 구현 방식: 런타임 데모
- 개념: 거리 + 시야각 + 시선 가림(Raycast) 세 가지를 모두 검사해 적이 플레이어를 봤는지 판정하는 처리. 거리만 쓰면 등 뒤나 벽 뒤에서도 발각되어 부자연스럽다.
- 씬에서 보여 주는 것: 시야각 90°·10m, 벽에 가리면 못 봄, 시야 부채꼴 메시
- 확인 포인트: 시야 부채꼴 밖(등 뒤)으로 돌아가 보세요. 가까워도 발각되지 않습니다. 시야 안이라도 벽에 가리면 못 보는지, 벽에서 나오는 순간 발각되는지 보세요.
0707
어그로 (Aggro) / 위협 수준 — 누구를 공격할지 우선순위
요청 예문: "데미지를 가장 많이 준 플레이어를 우선 공격하는 어그로 시스템을 만들어줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0707_Aggro.unity - 핵심 스크립트:
AggroEnemy - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0707_Aggro.cs - 구현 방식: 런타임 데모
- 개념: 여러 대상 중 누구를 공격할지 점수로 정하는 구조. 보통 누적 피해량을 위협 수준으로 쌓고, 도발 같은 스킬로 강제로 올린다. 파티 플레이의 역할 분담이 여기서 나온다.
- 씬에서 보여 주는 것: 데미지 누적 위협 수준으로 공격 대상 선택, 도발
- 확인 포인트: 두 아군이 번갈아 공격할 때 적이 누적 피해가 큰 쪽을 향하는지 보세요. 도발을 쓰면 위협 수준이 뛰어 대상이 즉시 바뀝니다.
0708
스포너 (Spawner) / 웨이브 — 적 생성기 / 단계별 등장
요청 예문: "웨이브마다 적 수가 5씩 늘어나는 웨이브 스포너를 만들어줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0708_WaveSpawner.unity - 핵심 스크립트:
WaveSpawner, WaveEnemy - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0708_WaveSpawner.cs - 구현 방식: 런타임 데모
- 개념: 적을 생성하는 주체와, 생성량·종류를 단계별로 올리는 진행 구조. 난이도 곡선을 직접 조절하는 장치이고, 오브젝트 풀링과 함께 쓰는 것이 보통이다.
- 씬에서 보여 주는 것: 웨이브마다 적 5마리씩 증가
- 확인 포인트: 웨이브를 진행해 적이 5마리씩 늘어나는지, 웨이브 사이에 간격이 있는지 보세요. 적을 모두 처치하면 다음 웨이브가 시작됩니다.
0709
보스 패턴 / 페이즈 — 공격 패턴 순환, 체력 구간별 변화
요청 예문: "보스가 3가지 패턴을 랜덤 반복하고 30% 이하에서 2페이즈로 바뀌게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0709_BossPhase.unity - 핵심 스크립트:
BossPhaseController - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0709_BossPhase.cs - 구현 방식: 런타임 데모
- 개념: 공격 패턴을 돌려 쓰고, 체력 구간(페이즈)마다 패턴 묶음을 바꾸는 보스 설계. 패턴 사이에 빈 틈을 두어 플레이어가 반격할 시간을 주는 것이 핵심이다.
- 씬에서 보여 주는 것: 패턴 3개 랜덤 반복, HP 30% 이하 2페이즈
- 확인 포인트: 보스의 패턴 3개가 번갈아 나오는지 보고, HP 를 30% 아래로 내려 2페이즈 패턴으로 바뀌는지 확인해 보세요.
0710
플로킹 (Flocking) / Boids — 무리지어 움직임
요청 예문: "물고기 떼가 Boids 알고리즘으로 무리 지어 헤엄치게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0710_Flocking.unity - 핵심 스크립트:
BoidsFlock - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0710_Flocking.cs - 구현 방식: 런타임 데모
- 개념: 분리(너무 붙지 않기) · 정렬(같은 방향 보기) · 응집(무리 중심으로 모이기) 세 규칙만으로 무리 움직임을 만드는 알고리즘. 물고기·새·좀비 떼에 쓴다.
- 씬에서 보여 주는 것: 물고기 80마리 Boids, 분리/정렬/응집 개별 토글
- 확인 포인트: 물고기 80마리가 무리로 도는지 보고, 세 규칙을 하나씩 꺼 보세요. 분리를 끄면 겹치고, 정렬을 끄면 방향이 흩어지고, 응집을 끄면 무리가 풀어집니다.
0711
A (A스타) / 타일 길찾기* — 격자 맵 최단 경로
요청 예문: "2D 타일맵에서 A* 알고리즘으로 적 길찾기를 만들어줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0711_AStar.unity - 핵심 스크립트:
AStarPathfinder, AStarGridDemo - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0711_AStar.cs - 구현 방식: 런타임 데모
- 개념: 격자 맵에서 시작점부터 목표까지 최단 경로를 찾는 알고리즘. 목표까지 남은 거리를 추정(휴리스틱)해 탐색 방향을 좁히기 때문에 다익스트라보다 훨씬 적은 칸만 살펴본다.
- 씬에서 보여 주는 것: Tilemap 격자 A* 길찾기, 다익스트라 비교
- 확인 포인트: 출발·도착을 바꿔 경로가 그려지는지 보세요. A* 와 다익스트라를 전환하면 결과 경로는 같은데 탐색한 칸(색칠된 칸) 수가 크게 다른 것이 보입니다.
0712
투사체 예측 조준 — 움직이는 대상을 미리 조준
요청 예문: "포탑이 플레이어 이동 속도를 고려해 예측 사격하게 해줘."
- 씬:
Assets/00_Scenes/07_EnemyAI/0712_PredictiveAim.unity - 핵심 스크립트:
PredictiveTurret, AIBullet - 빌더:
Assets/01_Scripts/Editor/Scenes/07_EnemyAI/Build0712_PredictiveAim.cs - 구현 방식: 런타임 데모
- 개념: 대상의 현재 속도와 투사체 속도로 만날 지점을 계산해 그곳을 겨누는 조준. 현재 위치를 겨누면 움직이는 적을 거의 맞히지 못한다.
- 씬에서 보여 주는 것: 이동 속도 고려 예측 사격 vs 현재 위치 조준 명중률
- 확인 포인트: 움직이는 대상에게 예측 사격과 현재 위치 조준을 번갈아 써 보세요. 명중률 표시 차이가 바로 보입니다. 대상이 멈춰 있으면 둘이 같아집니다.