기본 센서 시스템 구현 (시각, 청각)
지난 절들에서 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 (지배 감각): AI가 현재 가장 중요하게 여기는 감각을 설정합니다.
- Team (팀): AI가 팀원이나 적을 구별하는 데 사용됩니다.
기본 센서 시스템 구현: 시각 및 청각 감지
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 센서 반응 테스트
모든 블루프린트를 컴파일하고 저장합니다.
레벨에 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의 지능을 크게 향상시킵니다.