콜리전 설정
- 콜리전은 게임 오브젝트 간의 충돌을 처리하는 중요한 요소이다
스태틱 메시 애셋
- 스태틱 메시 애셋 자체에 콜리전 영역을 설정하는 방법
- 스태틱 메시 컴포넌트에서 비주얼과 충돌을 동시에 설정할 수 있어 관리가 간편
기본 도형(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(): 특정 키 값으로 데이터를 가져온다
게임 실행 과정
- 게임 앱의 초기화(UGameInstance::Init)
- 레벨 내 액터 초기화(AActor::PostInitializeComponents)
- 플레이어 로그인(AGameMode::PostLogin)
- 게임 시작(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 : 태스크가 진행 중이며, 결과는 나중에 반환 예정