icon
8장 : AI 시스템 구축

기본 센서 시스템 구현 (시각, 청각)


지난 절들에서 AI의 의사결정(비헤이비어 트리), 환경 분석(EQS), 그리고 이동(내비게이션)에 대해 다루었습니다. 이제 AI가 게임 세계를 '인지'하는 방법에 대해 알아볼 차례입니다. AI가 주변 환경, 플레이어, 다른 NPC 등을 감지하고 이에 반응하려면, 마치 인간의 오감처럼 정보를 수집하는 센서 시스템이 필요합니다.

언리얼 엔진은 AI가 시각, 청각, 촉각 등 다양한 방식으로 환경을 감지할 수 있도록 AI Perception Component를 비롯한 강력한 센서 시스템을 제공합니다.

이번 절에서는 AI가 플레이어를 감지하는 가장 기본적인 시각 및 청각 센서 시스템을 구현하는 방법에 대해 자세히 알아보겠습니다.


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 컨트롤러에 추가하는 것이 일반적입니다.

  1. AIC_Enemy 블루프린트 열기

  2. 컴포넌트 추가: 컴포넌트(Components) 패널에서 + Add 버튼을 클릭하고 AI Perception 을 검색하여 추가합니다.

  3. AI Perception 설정: AI Perception 컴포넌트를 선택하고 디테일(Details) 패널에서 다음을 설정합니다.

    • Senses Config (감각 설정)
      • + 버튼을 클릭하여 AI Sight Config를 추가합니다.
        • Sense Class: AISense_Sight
        • Sight 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_Hearing
        • Hearing Radius: 1000.0 (청각 반경)
        • Detection By Affiliation: Detects Faction 설정 (기본값)
    • Register as Source for Senses: (선택 사항) 이 AI가 다른 AI에게 감지될 소스(Source)가 될지 여부. (예: 이 AI가 내는 소리나 시각 정보가 다른 AI에게 감지될 수 있도록)
  4. 감지 이벤트 처리

    • AI Perception 컴포넌트를 선택한 상태에서 디테일 패널 하단의 이벤트(Events) 섹션으로 스크롤합니다.
    • On Target Perception Updated 이벤트 옆의 + 버튼을 클릭하여 이벤트 노드를 추가합니다. 이 이벤트는 AI가 무언가를 감지하거나, 감지 상태가 변경될 때마다 발생합니다.
    • On Target Perception Updated 이벤트 노드에서 다음 로직을 구현합니다.
      • Actor 핀에서 Cast To BP_PlayerCharacter 노드를 연결합니다. (감지된 액터가 플레이어인지 확인)
      • Successfully Sensed 불리언 핀을 Branch 노드에 연결합니다.
      • True (플레이어 감지 성공)
        • BP_PlayerCharacterAs BP Player Character 핀에서 Get Actor Location 노드를 호출합니다.
        • Set Blackboard Value as Vector 노드를 호출합니다. Blackboard Key 핀에 플레이어 위치를 저장할 블랙보드 키(예: TargetLocation)를 연결합니다. Value 핀에 Get Actor LocationReturn Value를 연결합니다.
        • Set Blackboard Value as Object 노드를 호출합니다. Blackboard Key 핀에 플레이어 액터를 저장할 블랙보드 키(예: TargetActor)를 연결합니다. Value 핀에 Cast To BP_PlayerCharacterAs BP Player Character 핀을 연결합니다.
        • (선택 사항) Print String으로 "플레이어 감지!" 메시지 출력.
      • False (플레이어 시야/청각에서 벗어남)
        • Clear Blackboard Value 노드를 호출합니다. Blackboard Key 핀에 TargetLocationTargetActor 블랙보드 키를 연결하여 값을 지웁니다. (AI가 플레이어를 잃었을 때)
        • (선택 사항) Print String으로 "플레이어 놓침!" 메시지 출력.
    • 컴파일 및 저장합니다.

블랙보드에 키 추가

AI 컨트롤러에서 감지된 정보를 저장할 블랙보드 키를 생성해야 합니다.

  1. BB_EnemyAI 블랙보드 에셋 열기
  2. 새 키 추가
    • 키(Keys) 패널에서 + New Key 버튼을 클릭합니다.
    • Key TypeVector로 설정하고 Key NameTargetLocation으로 지정합니다.
    • + New Key 버튼을 다시 클릭합니다.
    • Key TypeObject로 설정하고 Key NameTargetActor로 지정합니다. Base ClassActor로 설정합니다.
  3. 컴파일 및 저장합니다.

플레이어 캐릭터에 추가

플레이어 캐릭터가 AI에게 감지될 수 있도록 '자극원(Stimuli Source)' 역할을 하도록 설정해야 합니다.

  1. BP_PlayerCharacter 블루프린트 열기

  2. 컴포넌트 추가: 컴포넌트(Components) 패널에서 + Add 버튼을 클릭하고 AIPerceptionStimuliSource 를 검색하여 추가합니다.

  3. Stimuli Source 설정: AIPerceptionStimuliSource 컴포넌트를 선택하고 디테일(Details) 패널에서 다음을 설정합니다.

    • Register as Source for Senses
      • + 버튼을 클릭하여 AISense_Sight를 추가합니다.
      • + 버튼을 다시 클릭하여 AISense_Hearing을 추가합니다.
    • On Owner See Me / On Owner Hear Me: (선택 사항) 이 컴포넌트의 소유자(플레이어)가 다른 AI에게 감지되었을 때 발생하는 이벤트.
  4. 청각 자극 생성 (발소리 예시)

    • 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를 호출하도록 로직을 구성합니다. (또는 애니메이션 노티파이를 통해 발소리 발생 시점에 호출)
    • 컴파일 및 저장합니다.

테스트

  1. 모든 블루프린트를 컴파일하고 저장합니다.
  2. 레벨에 BP_EnemyCharacterBP_PlayerCharacter를 배치합니다.
  3. 게임을 플레이합니다.
  4. BP_EnemyCharacter의 시야 범위 내로 이동하거나, 소리를 내면 (움직이거나 총을 쏘는 등), AI가 플레이어를 감지하고 TargetLocationTargetActor 블랙보드 키가 업데이트되는 것을 확인할 수 있습니다.
  5. AI 컨트롤러의 On Target Perception Updated 이벤트에서 설정한 Print String 메시지를 통해 감지 여부를 확인합니다.
  6. 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의 지능을 크게 향상시킵니다.