10.22 - TIL

김혁·2025년 10월 22일

TIL

목록 보기
40/84

오늘의 코드카타

오늘의 공부

학습한 강의

  1. Unreal Engine의 Behavior Tree 기초 학습
    (4) enum을 활용해 AI의 State를 설정하고, 그에 따라 이동속도를 다르게 하는 Service 구현
    (5) AI Perception - 시각 시스템 구현 : Stimulus 활용
    (6) AI Perception - 청각 시스템 구현 : Perception이 아닌 PawnSensing 활용

몰랐던 내용 정리 (AI Perception vs PawnSensing Component)

AI Perception System

  • 현재 언리얼 엔진의 주력 인식 시스템으로, Stimulus 기반이다.
  • UAIPerceptionComponent를 통해 환경에서 발생하는 다양한 감각(Stimulus)을 객체 지향적으로 처리함
  • 작동 원리 : Stimulus 기반
    1. Sense(감각) : AI가 처리할 감각의 종류를 정의함. UAISenseConfig 클래스를 상속받아 설정
    2. Perceiver(인식 주체) : AI 캐릭터에 UAIPerceptionComponent를 추가하여 감각을 수신함
    3. Stimulus(자극) : 인식 가능한 액터에 UAISense_SightUAISense_Hearing 같은 센스 컴포넌트를 추가할 필요 없이, UAIPerceptionStimuliSourceComponent를 추가하여 자극의 출처를 선언함
    4. Reporting : 자극을 발생시키는 쪽에서 UAIPerceptionComponent:ReportEvent() 함수를 호출하여 시스템에 자극을 보고함
  • 장점
    • 중앙 집중식 : 모든 감각 정보가 UAIPerceptionSystem에 의해 관리되므로, 시스템 전체의 인식 상태를 쉽게 디버깅 가능
    • 유연한 확장성 : 시각, 청각 외에도 커스텀 감각을 쉽게 추가하고 설정할 수 있음
    • 성능 : 인식 주체가 아닌 자극을 발생시키는 쪽에서만 이벤트가 보고되므로, 더 효율적
  • 공식문서 : AI 퍼셉션

PawnSensing Component

  • 언리얼 엔진 초창기부터 존재했던 인식 시스템
  • 현재는 레거시 시스템으로 간주되지만, 간단한 인식 기능에는 여전히 사용될 수 있음
  • 작동 원리 : Polling 기반
    1. Component : AI 캐릭터에 UPawnSensingComponent를 추가함
    2. Sensing : 컴포넌트 자체에 시야각, 감지 반경, 시야 범위 등의 설정을 지정함
    3. Check : 지정된 시간 간격으로 UPawnSensingComponent가 주변 액터를 검사하여 감지 여부를 판단함
    4. Delegate : 감지 성공 시 델리게이트를 통해 이벤트를 AI 컨트롤러나 Pawn에게 전달함
  • 단점
    • 비효율성 : 모든 AI가 주변 환경을 주기적으로 검사하므로, AI 개수가 많아질수록 부하가 증가함
    • 제한된 감각 : 기본적으로 시각과 청각만 지원하며, 커스텀 감각을 추가하기 어려움
    • 분산 관리 : 감각 설정 및 로직이 각 PawnSensing 컴포넌트에 분산되어 있어 중앙 관리가 어려움


오늘의 CS

언리얼 엔진의 리플리케이션

  • 리플리케이션(Replication, 복제)은 언리얼 엔진이 멀티플레이어 게임을 지원하는 근간
  • 네트워크를 통해 게임 상태를 서버와 클라이언트 간에 일관되게 유지하는 메커니즘

클라이언트-서버 모델

  • 서버 : 게임의 진실을 담당하며, 모든 게임 로직(물리, 충돌, 피해 계산 등)을 처리하고 그 결과를 결정할 권한이 있음
  • 클라이언트 : 서버가 결정한 결과를 받아 게임 세계를 렌더링하고 사용자 입력을 서버에 전달하는 역할을 함

복제의 세 가지 유형

  1. 액터 복제
    • 액터 자체가 네트워크 상에 존재함을 선언
    • bReplicates 플래그가 true여야 함 (AActor::SetReplicates(true) or 블루프린트 설정)
    • 액터와 컴포넌트들이 네트워크에 의해 추적되고 복제 대상이 됨
    • Net Update Frequency를 통해 액터가 얼마나 자주 복제 정보를 보낼지 설정하여 네트워크 사용량을 조절할 수 있음
  2. Property Replication
    • 서버의 변수 값을 클라이언트에게 전송함
    • 기본적으로 Replicated 키워드를 통해 변수를 복제함
    • AActor::GetLifetimeReplicatedProps() 함수에서 DOREPLIFETIME 매크로를 사용하여 복제할 변수 등록이 필요함
    • ReplicatedUsing 키워드를 통해 값이 변경되었을 때 클라이언트가 특정 동작을 수행하게 할 수도 있음
  3. RPC (Remote Procedure Call)
    • 클라이언트 또는 서버에서 함수 호출을 다른 네트워크 주체에게 요청함
    • Server, Client, NetMulticast 키워드를 통해 실행 위치를 지정함
      • Server : 클라이언트에서 호출. 서버에서만 실행.
      • Client : 서버에서 호출. 특정 클라이언트에서만 실행.
      • NetMulticast : 서버에서 호출. 서버와 모든 클라이언트에서 실행.
    • 변수와 RPC는 모두 해당 액터의 복제 플래그가 활성화되어야 함

리플리케이션 컨디션

  • 네트워크 트래픽을 효율적으로 관리하기 위해 특정 변수나 함수가 언제, 누구에게 복제될지를 세밀하게 제어하는 메커니즘
  • 불필요한 데이터 전송을 막아 서버 부하와 네트워크 지연(Latency)을 줄여줌
조건설명사용 목적
COND_None조건 없음(기본값). 변수가 변경될 때마다 항상 복제됨.모든 클라이언트가 항상 알아야 하는 핵심 변수
COND_InitialOnly최초 한 번만 복제됨. 이후에는 복제되지 않음.액터가 스폰될 때 한 번만 설정하면 되는 값
COND_OwnerOnly액터의 소유자인 클라이언트에게만 복제됨.소유자 플레이어만 알아야 하는 개인 정보
COND_SkipOwner액터의 소유자를 제외한 모든 클라이언트에게 복제됨.소유자 클라이언트가 이미 로컬에서 해당 변수를 알고 있어 불필요한 복제를 막을 때
COND_Custom개발자가 커스텀 로직을 통해 복제 여부를 결정함.복제 관련성이 복잡한 경우(예: 팀원에게만 복제)
profile
게임 개발자를 향해..

0개의 댓글