PART 3 · 강의 1/3

Actor 클래스 계층

UObject부터 ACharacter까지 언리얼 엔진의 클래스 계층 구조를 이해합니다

01

UObject - 모든 것의 시작

언리얼 엔진 오브젝트 시스템의 최상위 클래스

UObject는 언리얼 엔진의 모든 클래스가 상속하는 최상위 기반 클래스입니다. 가비지 컬렉션, 리플렉션, 직렬화 등 엔진의 핵심 기능을 제공합니다.

Class Hierarchy UObject // 최상위 기반 클래스 ├─ AActor // 월드에 배치 가능한 오브젝트 │ ├─ APawn // 컨트롤러에 의해 조종 가능 │ │ └─ ACharacter // 이족보행 캐릭터 (Movement) │ ├─ APlayerController // 플레이어 입력 처리 │ ├─ AAIController // AI 의사결정 │ ├─ AGameModeBase // 게임 규칙 관리 │ ├─ AGameStateBase // 게임 상태 동기화 │ └─ APlayerState // 플레이어별 상태 정보 ├─ UActorComponent // 컴포넌트 기반 클래스 ├─ USubsystem // 생명주기 관리 서브시스템 └─ UBlueprintFunctionLibrary // 정적 함수 라이브러리

UObject가 제공하는 핵심 기능

기능설명
Garbage Collection참조 추적 기반 자동 메모리 관리
Reflection런타임에 클래스/속성/함수 정보 조회 (블루프린트 근간)
Serialization에셋 저장/로드, 네트워크 복제
CDO (Class Default Object)클래스별 기본값 오브젝트 (블루프린트 Class Defaults)
02

AActor - 월드의 시민

월드에 존재하는 모든 오브젝트의 기반 클래스

AActor는 월드에 배치하거나 스폰할 수 있는 모든 오브젝트의 기반입니다. Transform(위치/회전/크기)을 가지며, 컴포넌트를 포함할 수 있습니다.

Actor의 핵심 특성

Transform

월드 내 위치(Location), 회전(Rotation), 크기(Scale)를 가집니다. GetActorLocation, SetActorRotation 등으로 제어합니다.

컴포넌트 소유

여러 UActorComponent를 포함할 수 있습니다. 컴포넌트를 조합하여 Actor의 기능을 구성합니다.

생명주기

BeginPlay, Tick, EndPlay 등의 이벤트로 생명주기를 관리합니다. SpawnActor로 동적 생성, Destroy로 파괴합니다.

Actor 생명주기 순서

Constructor
PostInitializeComponents
BeginPlay
Tick (매 프레임)
EndPlay
Destroy

주요 Actor 함수

Key Actor Functions // 위치/변환 GetActorLocation() → Vector: 월드 위치 SetActorLocation(NewLoc) → 월드 위치 설정 GetActorRotation() → Rotator: 월드 회전 AddActorWorldOffset(Delta) → 상대 이동 // 스폰/파괴 SpawnActor(Class, Transform) → 새 Actor 생성 DestroyActor() → Actor 파괴 // 계층 AttachToActor(Parent, Rule) → 다른 Actor에 부착 GetOwner() → 소유 Actor 반환 // 태그 ActorHasTag(TagName) → 태그 확인 (Boolean) Tags → Name 배열 (Details에서 편집)
03

APawn과 ACharacter

플레이어와 AI가 조종하는 캐릭터 클래스

APawn

APawn은 컨트롤러(PlayerController 또는 AIController)에 의해 Possess(소유)될 수 있는 Actor입니다. 입력을 받아 행동하는 모든 엔티티의 기반입니다.

APawn 기능설명
ControllerPlayerController 또는 AIController가 Possess하여 제어
Input BindingSetupPlayerInputComponent에서 입력 바인딩
NavigationNavMesh 위에서 AI 이동 가능

ACharacter

ACharacter는 APawn을 상속하며, 이족보행 캐릭터에 필요한 기능이 내장되어 있습니다.

ACharacter Built-in Components ACharacter ├─ CapsuleComponent // 충돌용 캡슐 (Root) ├─ ArrowComponent // 전방 방향 표시 ├─ CharacterMovementComponent // 이동 로직의 핵심 │ ├─ Walking / Running │ ├─ Jumping / Falling │ ├─ Swimming │ ├─ Flying │ └─ Custom Movement Mode └─ SkeletalMeshComponent // 캐릭터 메시 (Mesh)

CharacterMovementComponent 주요 설정

속성기본값설명
Max Walk Speed600최대 걷기 속도 (cm/s)
Jump Z Velocity420점프 초기 속도
Air Control0.05공중 이동 제어 (0~1)
Gravity Scale1.0중력 배수
Braking Deceleration Walking2048걷기 감속률
Can CrouchFalse웅크리기 활성화 여부
Pawn vs Character 선택 기준

APawn: 차량, 드론, 탑뷰 RTS 유닛 등 커스텀 이동 로직이 필요할 때
ACharacter: 걷기, 점프, 중력이 필요한 이족보행 캐릭터일 때. CharacterMovementComponent가 대부분의 이동 로직을 처리해줍니다.

04

Controller 시스템

PlayerController와 AIController의 Possess 패턴

Controller는 Pawn을 소유(Possess)하여 제어하는 두뇌 역할입니다. Pawn은 몸, Controller는 정신으로 분리됩니다.

Controller-Pawn Relationship // Controller → Pawn 관계 APlayerController ──Possess──> APawn / ACharacter ├─ 입력 처리 ├─ 시각적 표현 ├─ 카메라 관리 ├─ 물리 충돌 ├─ HUD 관리 └─ 이동 로직 └─ 게임 규칙 접근 // 유용한 노드 [Get Player Controller] // 플레이어 컨트롤러 가져오기 (Index: 0) [Get Controlled Pawn] // 컨트롤러가 소유 중인 Pawn [Get Controller] // Pawn에서 컨트롤러 가져오기 [Possess] // 새 Pawn 소유 [UnPossess] // 소유 해제
Pawn과 Controller 분리의 장점

캐릭터가 사망해도 Controller는 유지됩니다. 리스폰 시 새 Pawn을 생성하고 다시 Possess하면 됩니다. 또한 같은 Pawn을 PlayerController와 AIController가 번갈아 소유할 수 있어, 플레이어가 AI 캐릭터를 임시로 조종하는 등의 기능을 쉽게 구현할 수 있습니다.

SUMMARY

핵심 요약

  • UObject는 가비지 컬렉션, 리플렉션, 직렬화를 제공하는 모든 클래스의 기반이다
  • AActor는 월드에 배치 가능하며, Transform과 컴포넌트를 소유한다
  • APawn은 Controller에 의해 소유(Possess)될 수 있는 Actor이다
  • ACharacter는 CapsuleComponent + CharacterMovementComponent를 내장하여 이족보행 이동을 지원한다
  • Controller(두뇌)와 Pawn(몸)을 분리하여 유연한 캐릭터 시스템을 구현한다
  • Actor 생명주기: Constructor → BeginPlay → Tick → EndPlay → Destroy
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: Actor 라이프사이클 로깅

Actor Blueprint를 만들고 BeginPlay, EndPlay, Tick 이벤트에 각각 Print String을 연결하세요. 레벨에 배치한 후 PIE로 실행하여 이벤트 발생 순서를 확인하세요. Tick에서는 Delta Seconds도 함께 출력하세요.

실습 2: Pawn vs Character 차이 체험

APawn 기반 BP와 ACharacter 기반 BP를 각각 생성하세요. Pawn에는 FloatingPawnMovement를, Character에는 기본 CharacterMovement를 사용하여 동일한 입력으로 이동시키고, 점프, 중력, 충돌 처리의 차이를 비교하세요.

심화 과제

GameMode에서 DefaultPawnClass를 커스텀 Character BP로 설정하고, PlayerController에서 Possess/UnPossess를 사용하여 여러 Pawn 사이를 전환하는 시스템을 구현하세요. SpawnActor 노드로 런타임에 Actor를 동적 스폰하는 것도 포함하세요.