기본 센서 시스템 구현 (시각, 청각)
AI Perception의 시각·청각 감각을 설정하고 감지 결과를 블랙보드에 반영해 플레이어 반응을 구현합니다.
지난 절들에서 AI의 의사결정(비헤이비어 트리), 환경 분석(EQS), 이동(내비게이션)을 다뤘습니다.
이번에는 AI가 게임 세계를 인지하는 방법으로 넘어갑니다.
주변 환경과 플레이어/NPC를 감지해 반응하려면, 인간의 오감과 유사한 센서 시스템이 필요합니다.
언리얼 엔진은 AI가 시각, 청각, 촉각 등 다양한 방식으로 환경을 감지할 수 있도록 AI Perception Component를 비롯한 강력한 센서 시스템을 제공합니다.
이번 절에서는 플레이어 감지에 가장 많이 쓰이는 시각/청각 센서 시스템 구현 방법을 정리합니다.
감각·성공·위치·나이를 Blackboard에 정규화하고 Behavior Tree가 행동을 판단하게 한다.
- 1. Stimuli Source
Stimuli Source Actor가 지정한 sense에 자동 또는 수동 등록된다.
- 2. Sense config
Sense config Sight·Hearing·Damage의 범위, affiliation, Max Age를 설정한다.
- 3. Perception event
Perception event On Target Perception Updated 에서 Actor와 Stimulus를 받는다.
- 4. Evidence policy
Evidence policy sense, success, location, age로 target 우선순위와 기억 상태를 정한다.
- 5. Blackboard
Blackboard TargetActor· LastKnownLocation· HasLineOfSight를 한 이벤트에서 함께 갱신한다.
- Sight · 현재 가시성
시야각·radius·occlusion을 보고 Actor 참조와 마지막 위치를 구분한다.
- Hearing · 사건 위치
noise의 위치·세기·tag를 추적 단서로 쓴다. 현재 시야 확보와는 다르다.
- Damage · 위협 사건
해 Actor와 위치를 높은 우선순위 증거로 쓰고 만료 정책을 둔다.
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 (지배 감각): AI가 현재 가장 중요하게 여기는 감각을 설정합니다.
- Team (팀): AI가 팀원이나 적을 구별하는 데 사용됩니다.
기본 센서 시스템 구현: 시각 및 청각 감지
감각 설정만 추가하면 끝이 아닙니다. 감지 이벤트가 TargetActor와 TargetLocation으로 이어지도록 각 블루프린트의 역할을 맞춰야 합니다.
- blueprint구현 순서
blueprint 1 AI Perception Component를 추가합니다. 2 Sight와 Hearing 설정을 각각 등록합니다. 3 On Target Perception Updated를 만듭니다. 4 TargetActor와 TargetLocation 키를 준비합니다. 5 Stimuli Source와 Make Noise로 자극을 보냅니다.
- AIC_Enemy
AI Perception Component를 추가합니다.
- Senses Config
Sight와 Hearing 설정을 각각 등록합니다.
- Perception Event
On Target Perception Updated를 만듭니다.
- Blackboard
TargetActor와 TargetLocation 키를 준비합니다.
- Player Source
Stimuli Source와 Make Noise로 자극을 보냅니다.
- sense감각별 설정 포인트
sense Sight Radius , Lose Sight Radius , 시야각을 함께 조정합니다. Hearing Radius 와 Loudness 가 소리 감지 거리를 결정합니다. 아군, 중립, 적 중 어떤 대상을 감지할지 명확히 둡니다.
- Sight
Radius , Lose Sight Radius , 시야각을 함께 조정합니다.
- Hearing
Radius 와 Loudness 가 소리 감지 거리를 결정합니다.
- 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:Detects Faction (Friendly/Neutral/Enemy)설정 (기본값)
+버튼을 클릭하여AI Hearing Config를 추가합니다.Sense Class:AISense_HearingHearing Radius:1000.0(청각 반경)Detection By Affiliation:Detects Faction설정 (기본값)
Register as Source for Senses: (선택 사항) 이 AI가 다른 AI에게 감지될 소스(Source)가 될지 여부. (예: 이 AI가 내는 소리나 시각 정보가 다른 AI에게 감지될 수 있도록)
AI Perception컴포넌트를 선택한 상태에서디테일패널 하단의이벤트(Events)섹션으로 스크롤합니다.On Target Perception Updated이벤트 옆의+버튼을 클릭하여 이벤트 노드를 추가합니다. 이 이벤트는 AI가 무언가를 감지하거나, 감지 상태가 변경될 때마다 발생합니다.On Target Perception Updated이벤트 노드에서 다음 로직을 구현합니다.Actor핀에서Cast To BP_PlayerCharacter노드를 연결합니다. (감지된 액터가 플레이어인지 확인)Successfully Sensed불리언 핀을Branch노드에 연결합니다.-
True(플레이어 감지 성공)BP_PlayerCharacter의As BP Player Character핀에서Get Actor Location노드를 호출합니다.Set Blackboard Value as Vector노드를 호출합니다.Blackboard Key핀에 플레이어 위치를 저장할 블랙보드 키(예:TargetLocation)를 연결합니다.Value핀에Get Actor Location의Return Value를 연결합니다.Set Blackboard Value as Object노드를 호출합니다.Blackboard Key핀에 플레이어 액터를 저장할 블랙보드 키(예:TargetActor)를 연결합니다.Value핀에Cast To BP_PlayerCharacter의As BP Player Character핀을 연결합니다.- (선택 사항)
Print String으로 플레이어 감지! 메시지 출력.
-
False(플레이어 시야/청각에서 벗어남)Clear Blackboard Value노드를 호출합니다.Blackboard Key핀에TargetLocation과TargetActor블랙보드 키를 연결하여 값을 지웁니다. (AI가 플레이어를 잃었을 때)- (선택 사항)
Print String으로 플레이어 놓침! 메시지 출력.
- 컴파일 및 저장합니다.
블랙보드에 키 추가
AI 컨트롤러에서 감지된 정보를 저장할 블랙보드 키를 생성해야 합니다.
BB_EnemyAI 블랙보드 에셋 열기키(Keys)패널에서+ New Key버튼을 클릭합니다.Key Type을Vector로 설정하고Key Name을TargetLocation으로 지정합니다.+ 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을 추가합니다.
On Owner See Me/On Owner Hear Me: (선택 사항) 이 컴포넌트의 소유자(플레이어)가 다른 AI에게 감지되었을 때 발생하는 이벤트.
BP_PlayerCharacter의이벤트 그래프에서 플레이어가 움직일 때마다Make Noise노드를 호출합니다.Make Noise노드는AI Perception시스템에 소리 자극을 생성합니다.Noise Location: 플레이어의 현재 위치 (Get Actor Location)Loudness: 소리의 크기 (0.0 ~ 1.0, 클수록 멀리 감지됨)Noise Tag: 소리의 종류를 구분하는 태그 (선택 사항)Instigator: 소리를 낸 액터 (플레이어 자신)
- (예시)
Event Tick에서Get Velocity를 통해 플레이어가 움직이는 속도를 확인하고, 일정 속도 이상일 때Make Noise를 호출하도록 로직을 구성합니다. (또는 애니메이션 노티파이를 통해 발소리 발생 시점에 호출) - 컴파일 및 저장합니다.
AI 센서 반응 테스트
시야와 청각 자극이 감지, 갱신, 만료를 거쳐 Blackboard 키와 경계 상태를 바꾸는 과정을 시간 흐름으로 정리한다.
- 1Stimulus 생성
플레이어가 시야에 들어오거나 소음을 만들면 Perception Component가 자극을 받는다. sense input
- 2Blackboard 갱신
감지 성공 시 Target Actor, Last Known Location, Alert Level 키를 기록한다. memory write
- 3행동 전환
Behavior Tree는 키 변화를 보고 순찰, 조사, 추적 중 하나를 선택한다. BT select
- 4자극 만료
일정 시간 새 감지가 없으면 target을 비우고 마지막 위치 조사 상태로 낮춘다. expiration
모든 블루프린트를 컴파일하고 저장합니다.
레벨에 BP_EnemyCharacter와 BP_PlayerCharacter를 배치합니다.
게임을 플레이합니다.
BP_EnemyCharacter의 시야 범위 내로 이동하거나, 소리를 내면 (움직이거나 총을 쏘는 등), AI가 플레이어를 감지하고 TargetLocation 및 TargetActor 블랙보드 키가 업데이트되는 것을 확인할 수 있습니다.
AI 컨트롤러의 On Target Perception Updated 이벤트에서 설정한 Print String 메시지를 통해 감지 여부를 확인합니다.
AI가 플레이어를 감지하면 비헤이비어 트리가 플레이어를 추적하는 행동으로 전환되는지 확인합니다.
센서 시스템 활용 시 고려사항
- 성능: 너무 넓은 감지 반경이나 너무 많은 AI가 동시에 복잡한 감지를 수행하면 성능에 영향을 줄 수 있습니다. 적절한 반경과 감지 빈도를 설정해야 합니다.
- 디버깅:
AI Perception컴포넌트의Show Debug옵션을 체크하면 에디터 뷰포트에서 AI의 시야각과 감지 반경을 시각적으로 확인할 수 있습니다. - 팀 관계: AI Perception은 팀(Faction) 시스템과 연동하여 아군/적군을 구별할 수 있습니다.
AI Perception컴포넌트의Detection By Affiliation설정을 통해 제어합니다. - 블랙보드 업데이트: 감지된 정보를 블랙보드에 정확하게 업데이트하는 것이 중요합니다. AI가 플레이어를 놓쳤을 때 블랙보드 값을 초기화하는 로직도 필수적입니다.
AI 센서 시스템은 AI에게 인지 능력을 부여하여 게임 세계에 대한 반응성을 높이고, 더욱 현실적이고 도전적인 AI를 구현하는 데 필수적인 요소입니다.
비헤이비어 트리, EQS와 함께 센서 시스템을 활용하면 복잡하고 지능적인 AI를 만들 수 있습니다.
이번 절에서는 언리얼 엔진의 AI Perception Component를 활용하여 AI의 시각 및 청각 센서 시스템을 구현하는 방법에 대해 알아보았습니다.
AI가 주변 환경을 인지하고 반응하는 능력은 게임의 몰입도와 AI의 지능을 크게 향상시킵니다.
AI Perception은 감지 이벤트를 바로 행동으로 연결하기보다 블랙보드 상태로 정리하면 디버깅이 쉬워집니다.
아래 다이어그램은 센서 이벤트 라우팅 기준입니다.
센서 신호를 바로 행동으로 연결하지 말고 신뢰도와 마지막 위치를 정리해 트리에 넘긴다.
- Sense
Sight와 Hearing이 자극을 수신한다.
- Stimulus
성공 여부, 위치, 감지 시간을 분리한다.
- Blackboard
TargetActor, LastKnownLocation, HasLineOfSight를 갱신한다.
- Behavior Tree
추적, 조사, 복귀 가지를 선택한다.
- Expire
오래된 자극은 Age 기준으로 지운다.
| 기준 | 판정 |
|---|---|
| 보자마자 공격함 | 신뢰도와 팀 필터 없이 행동으로 바로 연결된 상태다. |
| 소리에 반응 없음 | Hearing 반경, Tag, Stimulus 위치를 확인한다. |
센서 시스템은 “보았는가/들었는가”보다 감지 신호를 어떤 블랙보드 키와 행동 전환으로 연결할지까지 함께 설계해야 안정적입니다.
시각과 청각 이벤트를 즉시 행동으로 이어 붙이기보다 블랙보드 키로 정리하면 비헤이비어 트리와 디버깅이 안정됩니다.
- 센서 단서센서 단서 Sight Hearing
Blackboard
- On Target Perception Updated
actor, stimulus, last seen 위치를 분리해서 받는다.
- Sight / Hearing 판정
성공 여부와 감각 종류로 추적 또는 탐색 경로를 가른다.
- Blackboard Keys
TargetActor LastKnown HasLOS
- Behavior Tree
키 상태를 읽어 chase, investigate, patrol을 선택한다.
- detect
감지 반경과 시야각이 의도와 맞는지 표시합니다.
- filter
팀 관계와 감지 대상 조건을 확인합니다.
- write key
블랙보드 업데이트와 초기화 경로를 둡니다.
- debug
Perception과 Blackboard 디버그 화면을 함께 봅니다.
마지막으로 AI Perception으로 시각과 청각 이벤트를 받을 때 Blackboard에 전달하는 기준을 정리합니다.
시각과 청각 감지는 AIController의 Perception Component가 받고 Blackboard Key로 행동 트리에 전달합니다.
- 감지는 이벤트, 판단은 Blackboard
플레이어가 시야에 들어오면 TargetActor를 설정하고, 잃어버리면 LastKnownLocation이나 HasLineOfSight를 갱신합니다. 01 Sight Radius, Lose Sight Radius, Peripheral Vision Angle, Detection by Affiliation을 AI 성격에 맞게 조정합니다. 02 Make Noise나 Pawn Noise Emitter로 소음을 보내고 Hearing Range 안에서 위치를 LastHeardLocation에 저장합니다. 03 On Target Perception Updated의 Stimulus Was Successfully Sensed 값으로 획득과 상실을 나눕니다.
- 감지는 이벤트, 판단은 Blackboard
플레이어가 시야에 들어오면 TargetActor를 설정하고, 잃어버리면 LastKnownLocation이나 HasLineOfSight를 갱신합니다.
- 시야 설정
Sight Radius, Lose Sight Radius, Peripheral Vision Angle, Detection by Affiliation을 AI 성격에 맞게 조정합니다.
- 청각 설정
Make Noise나 Pawn Noise Emitter로 소음을 보내고 Hearing Range 안에서 위치를 LastHeardLocation에 저장합니다.
- 이벤트 분기
On Target Perception Updated의 Stimulus Was Successfully Sensed 값으로 획득과 상실을 나눕니다.