기본 센서 시스템 구현 (시각, 청각)
AI Perception의 시각·청각 감각을 설정하고 감지 결과를 블랙보드에 반영해 플레이어 반응을 구현합니다.
지난 절들에서 AI의 의사결정(비헤이비어 트리), 환경 분석(EQS), 이동(내비게이션)을 다뤘습니다.
이번에는 AI가 게임 세계를 인지하는 방법으로 넘어갑니다.
주변 환경과 플레이어/NPC를 감지해 반응하려면, 인간의 오감과 유사한 센서 시스템이 필요합니다.
언리얼 엔진은 AI가 시각, 청각, 촉각 등 다양한 방식으로 환경을 감지할 수 있도록 AI Perception Component를 비롯한 강력한 센서 시스템을 제공합니다.
이번 절에서는 플레이어 감지에 가장 많이 쓰이는 시각/청각 센서 시스템 구현 방법을 정리합니다.
AI 센서 시스템이란 무엇인가?
AI 센서 시스템은 AI가 주변 환경으로부터 정보를 수집하고, 이를 바탕으로 게임플레이 로직에 필요한 데이터를 얻는 메커니즘입니다.
AI는 이 센서 시스템을 통해 플레이어의 위치, 소리, 행동 등을 감지하고, 이를 비헤이비어 트리의 의사결정 과정에 활용합니다.
AI 센서 시스템이 필요한 이유- 환경 인지: AI가 게임 세계에 대한 정보를 얻고, 이를 통해 지능적인 행동을 할 수 있도록 합니다.
- 반응성: 플레이어의 행동(예: 발소리, 총성, 시야에 들어옴)에 AI가 실시간으로 반응하도록 만듭니다.
- 게임플레이 설계: 은신, 잠입, 추격 등 다양한 게임플레이 메커니즘을 센서 시스템을 통해 구현할 수 있습니다.
- 현실감: AI가 맹목적으로 행동하는 것이 아니라, 실제로 주변을 인지하고 반응하는 듯한 현실감을 부여합니다.
AI Perception Component
언리얼 엔진에서 AI 센서 시스템을 구현하는 핵심은 AI Perception Component입니다.
이 컴포넌트는 다양한 감각(Sense)을 통합하여 관리하며, 감지된 정보를 이벤트로 전달하여 AI 컨트롤러나 비헤이비어 트리에서 활용할 수 있게 합니다.
지원하는 주요 감각(Sense)- Sight (시각): AI가 특정 시야각 내에서 다른 액터(플레이어, 다른 NPC 등)를 볼 수 있는지 감지합니다.
- Hearing (청각): AI가 특정 반경 내에서 발생하는 소리(발소리, 총성 등)를 들을 수 있는지 감지합니다.
- Damage (피해): AI가 데미지를 입었을 때 이를 감지합니다.
- Dominant Sense (속성): 별도 감각 종류가 아니라 감지한 액터의 위치를 결정할 때 우선할 감각을 지정합니다.
- Team (팀 감각): 게임 로직이 보낸 팀 이벤트를 감지합니다. 아군·중립·적 필터는 별도의 Affiliation 설정과 팀 관계 구현으로 결정됩니다.
기본 센서 시스템 구현: 시각 및 청각 감지
AI가 플레이어를 시각적으로 감지하고, 플레이어가 내는 소리를 감지하도록 설정해 봅시다.
필요한 블루프린트- AI 폰 블루프린트 (예:
BP_EnemyCharacter) - AI 컨트롤러 블루프린트 (예:
AIC_Enemy) - 플레이어 캐릭터 블루프린트 (예:
BP_PlayerCharacter)
AI 컨트롤러에 추가 및 설정
AI Perception Component는 AI 컨트롤러에 추가하는 것이 일반적입니다.
AIC_Enemy 블루프린트 열기컴포넌트 추가: 컴포넌트(Components) 패널에서 + Add 버튼을 클릭하고 AI Perception을 검색하여 추가합니다.
AI Perception 설정: AI Perception 컴포넌트를 선택하고 디테일(Details) 패널에서 다음을 설정합니다.
-
Senses Config(감각 설정)+버튼을 클릭하여AI Sight Config를 추가합니다.Sense Class:AISense_SightSight Radius:1500.0(시야 반경)Lose Sight Radius:2000.0(시야에서 벗어나는 반경)Peripheral Vision Half Angle Degrees:60.0(시야각의 절반, 총 120도 시야각)Detection By Affiliation: 실습에서는Detect Neutrals를 켜고 플레이어 Cast로 대상을 거릅니다. 아군/적 분류를 쓰려면 별도 팀 관계를 구현합니다.
+버튼을 클릭하여AI Hearing Config를 추가합니다.Sense Class:AISense_HearingHearing Range:1000.0(청각 반경)Detection By Affiliation: 실습 대상에 맞게Detect Neutrals를 켭니다.
- 소스 등록은 수신용 Perception이 아니라 아래의
AIPerceptionStimuliSource에서 설정합니다. Blackboard는 트리 초기화 뒤에 접근해야 하며, 그 전 이벤트를 처리한다면 초기화 이후 다시 반영하는 경로가 필요합니다.
AI Perception컴포넌트를 선택한 상태에서디테일패널 하단의이벤트(Events)섹션으로 스크롤합니다.On Target Perception Updated이벤트 옆의+버튼을 클릭하여 이벤트 노드를 추가합니다. 이 이벤트는 AI가 무언가를 감지하거나, 감지 상태가 변경될 때마다 발생합니다.- 이벤트의
Actor를 플레이어로 Cast하고,Stimulus를Break AIStimulus로 나눕니다.Get Sense Class for Stimulus로 Sight/Hearing을 구분합니다. Get Blackboard로 얻은 Blackboard Component에Set Value as Object/Vector,Clear Value를 호출합니다. BT 노드용Set Blackboard Value as...와 호출 대상을 혼동하지 않습니다.- 아래 정책에 따라 갱신합니다. 청각 이벤트의 위치는
Stimulus Location을 사용하며, 보이지 않는 액터의 현재 위치를 계속 읽어 추적하지 않습니다.
감각별 Blackboard 갱신 정책
플레이어 한 명에 대해 선택한 사건의 추적 순서는 처음 시각 타깃이 없는 상태에서 청각 위치 기록→같은 플레이어 Sight 성공→Sight 상실이다. 청각 위치는 시각 타깃이 없을 때만 갱신하고, 시각 성공은 현재 타깃·확인 위치를 기록하며 상실은 타깃만 비우고 마지막 위치를 유지한다.
PROJECT POLICY · SIGHT / HEARING
감각별 증거를 나눠 Blackboard를 갱신합니다
아래는 플레이어 한 명을 대상으로 하는 예제의 처리 규칙입니다. 시각은 현재 타깃을, 청각은 조사할 위치를 갱신하며 서로의 유효한 증거를 함부로 지우지 않습니다.
동일 플레이어의 감각 사건에 대한 예제 정책이다. Sight 성공은 Actor와 관측 Location을 기록하고, Sight 상실은 해당 Actor만 비우며 마지막 Location은 유지한다. Hearing 성공은 시각 타깃이 없을 때만 소음 Location을 기록한다. 소음 기억의 수명 검사와 조사 완료 뒤 위치 해제는 별도 정책이다. Actor와 Location은 각각 TargetActor와 TargetLocation을 뜻합니다.
관계도 해설과 예제 원자료
| 상황·검사 | 기록할 값 | 유지·해제 기준 |
|---|---|---|
| 시각 성공 | TargetActor에 플레이어, TargetLocation에 확인 위치를 기록합니다. | 현재 시각 타깃을 설정합니다. |
| 시각 상실 | 해당 TargetActor를 비웁니다. | 마지막 TargetLocation은 조사할 단서로 유지합니다. |
| 청각 성공 | 시각 타깃이 없을 때 TargetLocation에 Stimulus Location을 기록합니다. | 소리만으로 현재 시각 타깃을 만들지 않습니다. |
| 소음 기억의 수명 검사 | 해당 소음 기억의 유효시간을 검사합니다. | 보이는 타깃을 지우지 않습니다. 조사 완료 시 위치를 해제합니다. |
- 상황·검사: 시각 성공
- 기록할 값: TargetActor에 플레이어, TargetLocation에 확인 위치를 기록합니다.
- 유지·해제 기준: 현재 시각 타깃을 설정합니다.
- 상황·검사: 시각 상실
- 기록할 값: 해당 TargetActor를 비웁니다.
- 유지·해제 기준: 마지막 TargetLocation은 조사할 단서로 유지합니다.
- 상황·검사: 청각 성공
- 기록할 값: 시각 타깃이 없을 때 TargetLocation에 Stimulus Location을 기록합니다.
- 유지·해제 기준: 소리만으로 현재 시각 타깃을 만들지 않습니다.
- 상황·검사: 소음 기억의 수명 검사
- 기록할 값: 해당 소음 기억의 유효시간을 검사합니다.
- 유지·해제 기준: 보이는 타깃을 지우지 않습니다. 조사 완료 시 위치를 해제합니다.
만료와 값 해제는 별도로 설계합니다
청각 기억의 유효시간을 검사하고 조사 완료 때 위치를 해제합니다. Max Age가 0이면 감각 자극은 나이 때문에 잊히지 않습니다. 감각 설정·Forget Stale Actors와 프로젝트의 기억 처리 정책을 함께 확인합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 원 표의 셀 | 해당 소음 기억의 유효 시간을 검사합니다. |
| 본문·주석 | 청각 기억의 유효 시간을 검사하고 조사 완료 때 위치를 해제합니다. Max Age가 0이면 감각 자극은 나이 때문에 잊히지 않습니다. 감각 설정·Forget Stale Actors와 프로젝트의 기억 처리 정책을 함께 확인합니다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 청각 사건 시각 타깃이 없는 상태에서 청각 감지가 성공하면 소음 위치를 기록한다. |
|
|
| 시각 성공 같은 플레이어의 Sight 성공으로 Actor를 설정한다. |
|
|
| 시각 상실 Actor를 비우되 위치 기억을 정책에 맞게 유지한다. |
|
|
감각별 Blackboard 갱신 정책
플레이어 한 명에 대해 선택한 사건의 추적 순서는 처음 시각 타깃이 없는 상태에서 청각 위치 기록→같은 플레이어 Sight 성공→Sight 상실이다. 청각 위치는 시각 타깃이 없을 때만 갱신하고, 시각 성공은 현재 타깃·확인 위치를 기록하며 상실은 타깃만 비우고 마지막 위치를 유지한다.
PROJECT POLICY · SIGHT / HEARING
감각별 증거를 나눠 Blackboard를 갱신합니다
아래는 플레이어 한 명을 대상으로 하는 예제의 처리 규칙입니다. 시각은 현재 타깃을, 청각은 조사할 위치를 갱신하며 서로의 유효한 증거를 함부로 지우지 않습니다.
동일 플레이어의 감각 사건에 대한 예제 정책이다. Sight 성공은 Actor와 관측 Location을 기록하고, Sight 상실은 해당 Actor만 비우며 마지막 Location은 유지한다. Hearing 성공은 시각 타깃이 없을 때만 소음 Location을 기록한다. 소음 기억의 수명 검사와 조사 완료 뒤 위치 해제는 별도 정책이다. Actor와 Location은 각각 TargetActor와 TargetLocation을 뜻합니다.
관계도 해설과 예제 원자료
| 상황·검사 | 기록할 값 | 유지·해제 기준 |
|---|---|---|
| 시각 성공 | TargetActor에 플레이어, TargetLocation에 확인 위치를 기록합니다. | 현재 시각 타깃을 설정합니다. |
| 시각 상실 | 해당 TargetActor를 비웁니다. | 마지막 TargetLocation은 조사할 단서로 유지합니다. |
| 청각 성공 | 시각 타깃이 없을 때 TargetLocation에 Stimulus Location을 기록합니다. | 소리만으로 현재 시각 타깃을 만들지 않습니다. |
| 소음 기억의 수명 검사 | 해당 소음 기억의 유효시간을 검사합니다. | 보이는 타깃을 지우지 않습니다. 조사 완료 시 위치를 해제합니다. |
- 상황·검사: 시각 성공
- 기록할 값: TargetActor에 플레이어, TargetLocation에 확인 위치를 기록합니다.
- 유지·해제 기준: 현재 시각 타깃을 설정합니다.
- 상황·검사: 시각 상실
- 기록할 값: 해당 TargetActor를 비웁니다.
- 유지·해제 기준: 마지막 TargetLocation은 조사할 단서로 유지합니다.
- 상황·검사: 청각 성공
- 기록할 값: 시각 타깃이 없을 때 TargetLocation에 Stimulus Location을 기록합니다.
- 유지·해제 기준: 소리만으로 현재 시각 타깃을 만들지 않습니다.
- 상황·검사: 소음 기억의 수명 검사
- 기록할 값: 해당 소음 기억의 유효시간을 검사합니다.
- 유지·해제 기준: 보이는 타깃을 지우지 않습니다. 조사 완료 시 위치를 해제합니다.
만료와 값 해제는 별도로 설계합니다
청각 기억의 유효시간을 검사하고 조사 완료 때 위치를 해제합니다. Max Age가 0이면 감각 자극은 나이 때문에 잊히지 않습니다. 감각 설정·Forget Stale Actors와 프로젝트의 기억 처리 정책을 함께 확인합니다.
이 예의 조건
- 본문과 원 도표에 제시된 사례의 입력·조건을 사용합니다. 설명용 수치나 독립 비교 경로는 각 단계에 표시합니다.
- 현재 상태·값과 전환 근거의 위치는 모든 단계에서 같습니다. 조건이 맞지 않거나 실행되지 않은 경로를 성공한 동작으로 해석하지 않습니다.
관계도의 보충 설명
| 범위 | 원문 |
|---|---|
| 원 표의 셀 | 해당 소음 기억의 유효 시간을 검사합니다. |
| 본문·주석 | 청각 기억의 유효 시간을 검사하고 조사 완료 때 위치를 해제합니다. Max Age가 0이면 감각 자극은 나이 때문에 잊히지 않습니다. 감각 설정·Forget Stale Actors와 프로젝트의 기억 처리 정책을 함께 확인합니다. |
| 관찰·상황 | 값·보충 정보 | 변화·이유 |
|---|---|---|
| 청각 사건 시각 타깃이 없는 상태에서 청각 감지가 성공하면 소음 위치를 기록한다. |
|
|
| 시각 성공 같은 플레이어의 Sight 성공으로 Actor를 설정한다. |
|
|
| 시각 상실 Actor를 비우되 위치 기억을 정책에 맞게 유지한다. |
|
|
- Sight 상실과 Hearing 갱신은 서로 다른 사건입니다. 한 자극의 실패만으로 다른 감각 상태까지 지우지 않습니다. 여러 대상을 다루는 확장은 액터별 감각 상태와 목표 우선순위를 별도로 둡니다.
- 컴파일하고 저장합니다.
블랙보드에 키 추가
AI 컨트롤러에서 감지된 정보를 저장할 블랙보드 키를 생성해야 합니다.
BB_EnemyAI 블랙보드 에셋 열기키(Keys)패널에서+ New Key버튼을 클릭합니다.Key Type을Vector로 설정하고Key Name을TargetLocation으로 지정합니다. 감지 위치를 기록할 때만 설정하고, 조사 완료 시Clear Value로 비웁니다.+ New Key버튼을 다시 클릭합니다.Key Type을Object로 설정하고Key Name을TargetActor로 지정합니다.Base Class는Actor로 설정합니다.
컴파일하고 저장합니다.
플레이어 캐릭터에 추가
플레이어 캐릭터가 AI에게 감지될 수 있도록 자극원(Stimuli Source) 역할을 하도록 설정해야 합니다.
BP_PlayerCharacter 블루프린트 열기컴포넌트 추가: 컴포넌트(Components) 패널에서 + Add 버튼을 클릭하고 AIPerceptionStimuliSource를 검색하여 추가합니다.
Stimuli Source 설정: AIPerceptionStimuliSource 컴포넌트를 선택하고 디테일(Details) 패널에서 다음을 설정합니다.
-
Register as Source for Senses+버튼을 클릭하여AISense_Sight를 추가합니다.+버튼을 다시 클릭하여AISense_Hearing을 추가합니다.
Auto Register as Source를 켭니다. 이 컴포넌트에On Owner See Me/On Owner Hear Me이벤트가 있는 것은 아니며, 감지 이벤트는 수신자의 Perception에서 처리합니다.
- 캐릭터의 발소리 Notify나 발사 이벤트에서
Report Noise Event를 호출합니다. 실제 오디오 재생만으로 AI Hearing 자극이 자동 발생하는 것은 아닙니다. Noise Location은 발생 위치,Instigator는 플레이어,Loudness는 양수 세기(예: 1),Tag는 소리 구분값으로 설정합니다.Max Range와 수신 Hearing Range도 확인합니다.- 매 Tick 호출보다 실제 소음 시점에 호출하여 불필요한 자극을 줄입니다.
- 컴파일하고 저장합니다.
AI 센서 반응 테스트
모든 블루프린트를 컴파일하고 저장합니다.
레벨에 BP_EnemyCharacter와 BP_PlayerCharacter를 배치합니다.
게임을 플레이합니다.
BP_EnemyCharacter의 시야 범위로 이동하여 Sight 성공 때 TargetLocation 및 TargetActor가 함께 설정되는지 확인합니다. 이어 시야를 잃으면 TargetActor가 비워지고 마지막 위치가 유지되는지 봅니다. 시각 타깃이 없는 상태에서 Report Noise Event를 발생시키면 TargetLocation에 소음 위치만 기록되고 TargetActor는 설정되지 않아야 합니다. 단순히 움직이거나 오디오를 재생하는 대신 앞에서 연결한 실제 소음 이벤트를 사용합니다.
AI 컨트롤러의 On Target Perception Updated 이벤트에서 설정한 Print String 메시지를 통해 감지 여부를 확인합니다.
AI가 플레이어를 시각으로 감지하면 비헤이비어 트리가 플레이어를 추적하는 행동으로 전환되는지 확인합니다. 소리만 감지한 경우에는 현재 플레이어 추적이 아니라 소음 위치 조사 분기와 연결합니다.
센서 시스템 활용 시 고려사항
- 성능: 너무 넓은 감지 반경이나 너무 많은 AI가 동시에 복잡한 감지를 수행하면 성능에 영향을 줄 수 있습니다. 적절한 반경과 감지 빈도를 설정해야 합니다.
- 디버깅: PIE에서 작은따옴표 키로 Gameplay Debugger를 열고 Numpad 4의 Perception 표시를 확인합니다. 입력 설정에 따라 키는 달라질 수 있습니다.
- 팀 관계: AI Perception은 팀(Faction) 시스템과 연동하여 아군/적군을 구별할 수 있습니다.
AI Perception컴포넌트의Detection By Affiliation설정을 통해 제어합니다. - 블랙보드 업데이트: 감지된 정보를 블랙보드에 정확하게 업데이트하는 것이 중요합니다. 타깃 상실과 마지막 위치 기억의 해제 시점을 구분합니다. 감각의 Max Age=0은 자동으로 잊지 않는 설정이며, 시간 만료 정책에는 Forget Stale Actors 등 관련 설정을 함께 확인합니다.
AI 센서 시스템은 AI에게 인지 능력을 부여하여 게임 세계에 대한 반응성을 높이고, 더욱 현실적이고 도전적인 AI를 구현하는 데 필수적인 요소입니다.
소리 위치와 현재 액터 위치 구분하기
시각 타깃이 없는 상태에서 플레이어가 월드 (100, 200, 0) cm에서 낸 소음을 감지했습니다. 그 플레이어는 보이지 않는 채 (900, 900, 0) cm로 이동했고 새 자극은 없습니다. 조사 위치와 TargetActor는 어떻게 유지하나요? 그다음 Sight가 성공한 뒤 이전 소음이 만료되면 보이는 타깃을 지워도 될까요?
감각별로 확인한 증거만 사용하기
조사 위치는 Stimulus Location인 (100, 200, 0) cm이며 TargetActor는 미설정입니다. 보이지 않는 플레이어의 현재 좌표를 계속 읽으면 감지하지 않은 움직임까지 AI가 알게 됩니다. Sight가 성공하면 시각 타깃을 설정하며 이전 소음의 만료만으로 그 시각 타깃을 지우지 않습니다. Max Age의 감각 기억과 Blackboard 위치 해제는 자동으로 같은 사건이 아니므로 본 예제의 조사 완료 정책도 확인합니다.
비헤이비어 트리, EQS와 함께 센서 시스템을 활용하면 복잡하고 지능적인 AI를 만들 수 있습니다.