언리얼 정리 3(콜리전, 시스템, 비헤이비어 트리)

윤준혁·2025년 3월 12일

콜리전 설정

  • 콜리전은 게임 오브젝트 간의 충돌을 처리하는 중요한 요소이다

스태틱 메시 애셋

  • 스태틱 메시 애셋 자체에 콜리전 영역을 설정하는 방법
  • 스태틱 메시 컴포넌트에서 비주얼과 충돌을 동시에 설정할 수 있어 관리가 간편

기본 도형(Primitive) 컴포넌트

  • 구체, 박스, 캡슐 등의 기본 도형을 사용하여 충돌 영역을 설정하는 방식
  • 주로 스켈레탈 메시와 함께 사용되며, 캐릭터의 움직임과 관련된 충돌을 처리할 때 유용

피직스 애셋

  • 스켈레탈 메시에만 적용 가능한 방식으로, 캐릭터의 각 관절이 물리적으로 움직이는 헝겊 인형(Ragdoll) 효과를 구현할 때 사용

물리 설정 구분

  • 언리얼 엔진에서 물리는 콜리전 채널과 기본 반응, 콜리전 채널의 용도, 다른 콜리전 채널과의 반응으로 구분된다
  • 성능을 고려하여 무시(Ignore) 반응을 최대화하고, 블록(Block) 반응을 최소화하는 방식으로 동작

기본 제공 콜리전 채널(8가지)

  • WorldStatic : 움직이지 않는 정적인 배경 액터(주로 스태틱 메시 액터에 사용)
  • WorldDynamic : 움직이는 액터(블루프린트에 속한 스태틱 메시 컴포넌트에 사용)
  • Pawn : 캐릭터 충돌을 담당하는 캡슐 컴포넌트(플레이어 조작 오브젝트)
  • Visibility : 배경 물체가 보이는지 탐지(마우스 피킹 기능 구현 시 사용)
  • Camera : 카메라와 목표물 사이 장애물 탐지
  • PhysicsBody : 물리 시뮬레이션이 적용된 객체
  • Vehicle : 차량 충돌 감지(물리 기반 차량 시스템)
  • Destructible : 파괴 가능한 오브젝트(Destructible Mesh)

오브젝트 채널 vs 트레이스 채널

  • 오브젝트 채널: 콜리전 영역에 직접 적용하는 채널
  • 트레이스 채널: 특정 행동(예: 라인 트레이스)에서 사용되는 채널

콜리전 감지 함수 중 하나로 SweepSingleByChannel이 있으며, 이 함수는 물리적인 충돌 여부를 판별하는 데 사용

가비지 컬렉션

  • 언리얼 엔진은 메모리에 존재하는 오브젝트의 참조 여부를 주기적으로 검사하여 사용되지 않는 오브젝트를 자동으로 제거한다
  • 사용 중인지 여부는 다른 언리얼 오브젝트가 해당 오브젝트를 참조하는지로 판단

예시) FHitResult의 멤버 변수Actor의 선언이 일반 참조로 선언된다면 해당 함수에서의 참조로 인해 제거돼야 할 액터가 메모리에 그대로 남아있는 문제 발생 -> 이런 문제를 방지하기 위해 FHitResult는 참조로부터 자유롭게 포인터 정보를 전달해주는 약 포인터(TWeakObjectPtr) 방식으로 멤버 변수를 선언한다(약 포인터로 지정된 액터에 접근하려면 IsValid 함수를 사용해 액터가 유효한지 먼저 점검하고 사용해야 한다)

액터의 대미지 처리

  • AActor 클래스는 기본적으로 TakeDamage 함수를 제공하며, 이는 액터가 대미지를 받을 때 호출된다

TakeDamage 함수의 주요 인자

  • DamageAmount : 전달할 대미지 양
  • DamageEvent : 대미지 종류
  • EventInstigator : 공격 명령을 내린 가해자
  • DamageCauser : 대미지를 가한 도구 또는 무기

UDataTable의 변경 사항

  • 언리얼 엔진 업데이트에 따라 GetRowMap() 함수가 제거되었다
  • 대신 다음 대체 API를 사용할 수 있다

    GetRowNames(): UDataTable의 모든 행의 이름을 가져온다
    FindRow(): 특정 키 값으로 데이터를 가져온다

게임 실행 과정

  1. 게임 앱의 초기화(UGameInstance::Init)
  2. 레벨 내 액터 초기화(AActor::PostInitializeComponents)
  3. 플레이어 로그인(AGameMode::PostLogin)
  4. 게임 시작(AGameMode::StartPlay, AActor::BeginPlay)

부동소수점 비교 시 유의점

  • 부동소수점 float 값을 0과 직접 비교하면 오차가 발생할 수 있다
  • 언리얼 엔진은 이를 방지하기 위해 KINDA_SMALL__NERBER 매크로를 제공하여 미세한 오차를 무시하도록 할 수 있다

UI 시스템의 변경 사항 (4.21 버전 이후)

  • 언리얼 엔진 4.21부터 UI 위젯의 초기화 시점이 PostInitializeComponents → BeginPlay로 변경되었다
  • 따라서 UI 생성과 관련된 작업은 BeginPlay 이후에 수행해야 UI가 정상적으로 반영된다

내비게이션 시스템 변경 사항 (4.20 버전 이후)

  • NavigationSystem 모듈이 추가되었으며, 이를 프로젝트 설정에 지정해야 한다
  • NavigationSystem 클래스가 NavigationSystemV1로 변경되었다
  • 구현부에 NavigationSystem.h 헤더를 추가해야 한다
  • SimpleMoveToLocation 함수가 블루프린트 라이브러리로 이동되었다

비헤이비어 트리 (Behavior Tree)

  • 비헤이비어 트리는 NPC의 행동을 분석하고 우선순위가 높은 행동을 실행하는 시스템이다

블랙보드(Blackboard)와 비헤이비어 트리(Behavior Tree)

  • 블랙보드: NPC의 의사결정을 위한 데이터 저장소
  • 비헤이비어 트리: 블랙보드 데이터를 기반으로 NPC의 행동을 정의하는 시스템

ExecuteTask 함수의 반환 값

  • Aborted : 태스크 실행 중 중단됨(실패)
  • Failed : 태스크 수행 실패
  • Succeeded : 태스크 성공
  • InProgress : 태스크가 진행 중이며, 결과는 나중에 반환 예정

0개의 댓글