# 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 컨트롤러를 상속받아 확장 - 커스텀 상태 및 전환 조건 정의 방법