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 현재 위치 조준 명중률
  • 확인 포인트: 움직이는 대상에게 예측 사격과 현재 위치 조준을 번갈아 써 보세요. 명중률 표시 차이가 바로 보입니다. 대상이 멈춰 있으면 둘이 같아집니다.