# Enemy AI Logic

## 1. 개요

이 문서는 게임 내 적 AI 시스템의 설계 원칙과 구현 방법을 설명한다.
적 AI는 플레이어에게 도전적이면서도 예측 가능한 패턴을 제공하여 게임 플레이 경험을 향상시키는 것을 목표로 한다.

## 2. AI 아키텍처

### 2.1 상태 기계(State Machine)
적 AI는 기본적으로 상태 기계 패턴을 사용하여 구현되며 다음과 같은 주요 상태를 포함한다:
- **대기(Idle)**: 특별한 행동 없이 주변을 관찰 및 가벼운 주변 배회 이동
- **순찰(Patrol)**: 정해진 경로를 따라 이동
- **추적(Chase)**: 플레이어를 감지하고 추적
- **공격(Attack)**: 플레이어에게 공격 실행
- **도망(Retreat)**: 체력이 낮을 때 안전한 위치로 이동

### 2.2 결정 트리
상태 전환은 다음 조건에 따라 결정됩니다:
- 감지 시스템
  - 플레이어와의 거리
  - 시야각 내 플레이어 존재 여부
- 현재 체력 상태
- 마지막 공격 후 경과 시간

## 3. 감지 시스템
### 3.1 단계
- 감지 시스템에 따라 상태가 정해지며 총 4단계로 정의한다.
- 1. 0단계 : 아무런 이상 없이 감지가 되지 않는 상태
- 2. 1단계 : 이상은 감지 하였으나 타겟이 특정되지 않은 상태
- 3. 2단계 : 이상 위치를 파악한 상태 
- 4. 3단계 : 이상 타겟을 특정한 상태

### 3.1 시야 감지
- Enemy의 시야에 따른 감지 범위 설정
- 시야각: 전방 120도
- 최대 거리: 30 ~ 40미터 (난이도에 따라 조정)
- 감지 거리: 15 ~ 20미터 (난이도에 따라 조정) 
- 인식 거리: 0 ~ 15미터 (난이도에 따라 조정)
- 장애물 고려: 시야 차단 검사
- 시야에 따른 감지 단계 전환:
  - 0단계 -> 1단계: 0.5 ~ 1초 동안 감지 거리 내에 캐릭터 오브젝트가 시야 안에 들어옴 (적대 관계인지 아닌지 파악)
  - 1단계 -> 2단계: 1초 이상 감지 거리 내에 캐릭터 오브젝트가 시야 안에 들어옴
  - 2단계 -> 3단계: 인식거리 내에 캐릭터 오브젝트가 시야 안에 들어옴
  - 역전환 조건:
    - 3단계 -> 2단계: 타겟이 최대 거리 밖으로 벗어난 상태가 3초 이상 지속되며 관찰했던 타겟의 위치를 기억
    - 2단계 -> 1단계: 이상의 최종 위치로 이동 후 주변(반경 5미터 이내) 순찰 후 5초간 타겟이 발견되지 않음
    - 1단계 -> 0단계: 원래 위치로 이동 후 3초간 아무런 이상이 발견되지 않음

### 3.2 청각 감지
- 플레이어 행동 소음 수준에 따른 감지 범위 설정
- 감지 거리: 10 ~ 25미터 (난이도에 따라 조정)
- 소음 발생 지수
    - 장애물 고려: 청각 차단 검사
    - 소음의 지수는 캐릭터 오브젝트의 움직이는 속도와 행동에 따라 결정된다. 
    - 측정 기준 수치 : 걷기 : 0~3의 속도 / 달리기 : 3 이상 /
      - 일반적인 걷기: ((1 * 소음 방지 지수(기본 1)) * 캐릭터의 이동 속도) - 장애물 지수(장애물이 있으면 1, 없으면 0) = 0 ~ 3
      - 달리기 : ((1.2 * 소음 방지 지수(기본 1)) * 캐릭터의 이동 속도) - 장애물 지수(장애물이 있으면 1, 없으면 0) = 3.6 이상
      - 공격 : ((1.5 * 소음 방지 지수(기본 1)) * 5) - 장애물 지수(장애물이 있으면 1, 없으면 0) = 7.5 
- 소음 수준: (캐릭터 오브젝트의 소음 발생 지수에 따라 결정)
  - 무소음: 0 ~ 1
  - 약한 소음: 1 ~ 2.5
  - 보통 소음: 2.5 ~ 4
  - 큰 소음: 4 이상
- 소리에 따른 감지단계 전환:
  - 0단계 -> 1단계: 약한 소음 이상이 감지 거리 내에 들어옴
  - 1단계 -> 2단계: 보통 소음 이상이 감지 거리 내에 들어옴
  - 2단계 -> 3단계: 큰 소음이 감지 거리 내에 들어옴
  - 역전환 조건:
    - 3단계 -> 2단계: 타겟이 최대 거리 밖으로 벗어난 상태가 3초 이상 지속되며 관찰했던 타겟의 위치를 기억
    - 2단계 -> 1단계: 이상의 최종 위치로 이동 후 주변(반경 5미터 이내) 순찰 후 5초간 타겟이 발견되지 않음
    - 1단계 -> 0단계: 원래 위치로 이동 후 3초간 아무런 이상이 발견되지 않음

## 4. 행동 패턴
### 4.1 상태
- 행동 패턴은 각 AI가 가지는 상태에 따라서 그 동작이 결정된다.
- 상태는 행동 패턴의 대기, 순찰, 전투 등과는 다른 개념이다.
- 상태의 종류는 다음과 같다:
    - 일반(Normal): AI의 행동에 개입하는 어떠한 이상이나 타겟이 없는 상태로 주어진 행동 패턴에 맞는 활동을 수행한다.
    - 감지(Detected): AI가 이상을 감지한 상태로 아직은 타겟을 파악하지는 못하였기에 주어진 행동 패턴에 맞는 활동을 수행하나 언제든 다음 상태로 넘어갈 수 있는 상태이다.
    - 인식(Aware): AI가 이상을 인식한 상태이지만 아직도 타겟은 특정 캐릭터 관련 오브젝트가 아니라 이상이 발생한 위치이다. 이 상태에서는 주어진 행동 패턴에서 인식 상태에 맞는 활동을 수행한다.
    - 탐지(Alerted): AI가 타겟을 탐지한 상태로 이때 타겟을 향해 상호작용을 진행한다. 주어진 행동 패턴에서 탐지 상태에 맞는 활동을 수행한다.
- 상태의 전환은 감지 시스템과 캐릭터 오브젝트의 상황에 따라 결정된다.

### 4.2 대기(Idle) 로직
- 주변을 천천히 관찰하며 가벼운 주변 배회 이동을 한다.
- 상태의 전환은 감지 시스템에 의해 결정된다.
    - 감지 0단계는 일반 상태, 감지 1단계는 감지 상태, 감지 2단계는 인식 상태, 감지 3단계는 탐지 상태로 전환된다.
    - 각 상태별 대기 행동:
      - 일반 상태: 정해진 반경 내 랜덤 이동 (반경 2미터 이내), 주기적인 방향 전환, 주변 환경 관찰
      - 감지 상태: 의심 방향으로 돌리기, 이동 속도 감소, 주의 집중도 증가
      - 인식 상태: 의심 지점으로 이동, 주변 5미터 반경 탐색, 방어 태세 준비
      - 탐지 상태: 타겟 방향으로 신속 이동, 공격 준비 태세, 전투 로직 활성화

### 4.3 순찰(Patrol) 로직
- 정해진 경로를 따라 순찰하며 지점 도달 시 주변을 관찰한다.
- 무작위 대기 행동 추가로 자연스러운 움직임 구현
- 상태의 전환은 감지 시스템에 의해 결정된다.
    - 감지 0단계는 일반 상태, 감지 1단계는 감지 상태, 감지 2단계는 인식 상태, 감지 3단계는 탐지 상태로 전환된다.
    - 각 상태별 순찰 행동:
      - 일반 상태: 정해진 경로를 따라 순찰, 지점 도달 시 주변 관찰(2~4초)
      - 감지 상태: 의심 방향으로 돌리기, 이동 속도 감소, 주의 집중도 증가
      - 인식 상태: 의심 지점으로 이동, 주변 5미터 반경 탐색, 방어 태세 준비
      - 탐지 상태: 타겟 방향으로 신속 이동, 공격 준비 태세, 전투 로직 활성화

### 4.3 전투(Attack) 로직
- 근접 공격: 플레이어와 2미터 이내일 때 실행
- 원거리 공격: 5-10미터 거리에서 실행
- 공격 쿨타임: 1-3초 (난이도에 따라 조정)
- 상태의 전환은 감지 시스템에 의해 결정된다.
    - 감지 0단계는 일반 상태, 감지 1단계는 감지 상태, 감지 2단계는 인식 상태, 감지 3단계는 탐지 상태로 전환된다.
    - 각 상태별 전투 행동:
      - 일반 상태: 비전투 태세 유지, 주변 경계
      - 감지 상태: 방어 태세 준비, 이동 속도 감소, 이전에 하던 행동으로 전환
      - 인식 상태: 타겟 위치로 신속 이동, 공격 준비
      - 탐지 상태: 타겟 추적 및 공격 실행, 회피 및 방어 동작 포함

### 4.4 추적(Chase) 로직
- 플레이어를 감지하면 추적 상태로 전환
- 추적 속도: 기본 이동 속도(걷기)의 1.2배
- 추적 중 플레이어가 시야에서 벗어나면 마지막 위치로 이동 후 주변 탐색
- 상태의 전환은 감지 시스템에 의해 결정된다. 
    - 감지 0단계는 일반 상태, 감지 1단계는 감지 상태, 감지 2단계는 인식 상태, 감지 3단계는 탐지 상태로 전환된다.
    - 각 상태별 추적 행동:
      - 일반 상태: 비전투 태세 유지, 주변 경계
      - 감지 상태: 방어 태세 준비, 이동 속도 감소, 이전에 하던 행동으로 전환
      - 인식 상태: 타겟 위치로 신속 이동, 공격 준비
      - 탐지 상태: 타겟 추적 및 공격 실행, 회피 및 방어 동작 포함

### 4.5 도망(Retreat) 로직
- 체력이 20% 이하로 떨어지면 도망 상태로 전환
- 도망 속도: 기본 이동 속도의 1.2배
- 안전한 위치(예: 아군 근처, 엄폐물 뒤)로 이동
- 도망 중 플레이어가 시야에서 벗어나면 일정 시간 후 원래 위치로 복귀
- 상태의 전환은 감지 시스템에 의해 결정된다. 
    - 감지 0단계는 일반 상태, 감지 1단계는 감지 상태, 감지 2단계는 인식 상태, 감지 3단계는 탐지 상태로 전환된다.
    - 각 상태별 도망 행동:
      - 일반 상태: 비전투 태세 유지, 주변 경계
      - 감지 상태: 방어 태세 준비, 이동 속도 감소, 이전에 하던 행동으로 전환
      - 인식 상태: 타겟 위치로 신속 이동, 공격 준비
      - 탐지 상태: 타겟 추적 및 공격 실행, 회피 및 방어 동작 포함

## 5. 경로 탐색

### 5.1 NavMesh 활용
- Unity NavMesh 시스템을 활용한 경로 계산
- 장애물 회피를 위한 NavMeshObstacle 활용
- 동적 장애물 감지 시 경로 재계산(0.5초 간격)

### 5.2 특수 이동

## 6. 성능 최적화

### 6.1 LOD 시스템
- 거리에 따른 AI 복잡도 조절
- 30미터 이상: 간소화된 행동 패턴 사용
- 50미터 이상: 시각적 업데이트만 수행

### 6.2 계산 분산
- 감지 로직 업데이트: 0.2초마다 실행
- 경로 재계산: 필요시에만 수행(최소 0.5초 간격)

## 7. 확장성

### 7.1 AI 난이도 조정
- 감지 범위, 반응 속도, 공격력 등 조정 가능한 파라미터 제공
- 난이도별 프리셋 구성

### 7.2 새로운 AI 유형 추가
- 기본 AI 컨트롤러를 상속받아 확장
- 커스텀 상태 및 전환 조건 정의 방법