2 분 소요

Unreal의 게임 플레이 오브젝트의 상속 구조

UObject
  └── AActor
       └── APawn
            └── ACharacter
  • UObject: 모든 언리얼 객체의 기반 (에디터/런타임 구조 전체 포함)

  • AActor: 월드에 등장 가능

  • APawn: 조종 가능 (컨트롤러와 연결)

  • ACharacter: 이동, 점프, 애니메이션 기능 내장

ACharacter는 결국 APawn부터 그 위의 클래스들을 상속받음

UObject

언리얼 객체의 기반이 되는 클래스

항목 설명
타입 가장 기본적인 언리얼 객체 클래스
역할 가비지 컬렉션, 리플렉션, 시리얼라이즈 지원
예시 UTexture, USoundWave, UBlueprint, UMySubsystem
  • 직접 월드에 배치되진 않기에 위치, 회전, 렌더링 등이 없음

Unreal의 자체적인 빌드 도구(UnrealHeaderTool)과 메타 시스템과 밀접한 연관이 있는 클래스

  • 가비지 컬렉션
    C++의 경우, 일반적으론 new - delete의 방식으로 프로그래머가 메모리를 해제해줘야 하지만
    UOjbect기반 객체는 엔진이 관리해준다
    UCLASS() 와 UPROPERTY() 매크로의 사용으로
    엔진의 가비지 컬렉터가 사용 객체의 참조를 추적하고, 필요 없다 판단 시 메모리에서 해제
    (엔진이 매프레임마다 Root Object -> 참조 -> 참조 … 를 추적하여 ‘참조되지 않는 객체’를 해제)
    (UPROPERTY()로 선언하지 않은 변수는 참조하지 않기에 주의)
UPROPERTY()
UTexture2D* MyTexture; -> 추적

UTexture2D* MyTexture; -> GC가 추적하지 않기에 누수 위험 존재
  • 리플렉션(Reflection)
    코드 내부 구조 (클래스, 변수, 함수)에 대한 ‘메타 정보’를 런타임 or 에디터에서 조회하거나 활용할 수 있는 기능
    엔진이 UCLASS, USTRUCT, UFUNCTION, UPROPERTY 매크로를 통하여 리플렉션 정보를 자동으로 ‘별도 생성’한다
    (특정 클래스를 상속받아 만들어진 Actor 클래스를 다른 BP에서 ‘선택’할 수 있는것도 이러한 기능이 기반)
    (런타임 클래스 생성, TSubclassOf<> 등의 클래스 선택, 클래스 정보 확인 등등)
    (이러한 메타 데이터는 .generated.h에 저장된다)
  • 시리얼라이즈(Serialization)
    객체의 데이터를 저장/로드/전송 가능한 형태로 변환하는 기능
    UObject 기반 클래스에 대하여 자동 지원
    UPROPERTY() 가 붙은 필드는 기본적으로 시리얼라이즈 됨


반대로 이러한 기능이 필요없는 클래스라면 C++로 클래스를 선언하여도 무방(ex: 유틸관련 클래스)

AActor

World(게임 세계)에 배치될 수 있는 클래스의 기반

항목 설명
상속 UObject → AActor
역할 월드에 배치되는 모든 요소의 기본 클래스
기능 위치, 회전, 월드 스폰, 컴포넌트 소유 가능
예시 라이트, 데칼, 캐릭터, 트리거 볼륨 등
  • AActor 부터 BeginPlay(),Tick()과 같은 이벤트와
    Transform, SpawnActor 등을 사용 가능

  • Level에 배치하려면 최소한 AActor를 상속 받아야 한다

APawn

조종이 가능한 Actor

항목 설명
상속 AActor → APawn
역할 플레이어나 AI가 조종할 수 있는 액터
기능 Possess(), AutoPossessPlayer, Controller 연결
예시 플레이어 캐릭터, 드론, 차량, AI 유닛 등
  • Controller가 ‘빙의’하여 ‘조작’할 순 있지만, 자체적인 지원 기능은 없음
  • Character처럼 다채로운 움직임이 필요하지 않는 간단한 이동 조작 물체거나 (ex : 드론, 카메라)
    자체적인 이동 로직등을 구현해야 하는 경우나 (ex : 차량 등 탑승 물체, ‘마린’이나 ‘저글링’ 같은 RTS 유닛 등)
    정말 단순한 ‘이동 제어’만 필요한 경우에 사용 (Character보단 가벼우므로)

ACharacter

자체적인 이동이 구현된 고급 Pawn

항목 설명
상속 APawn → ACharacter
역할 지상 기반의 3D 캐릭터 구현을 위한 클래스
핵심 기능 CharacterMovementComponent, CapsuleComponent, SkeletalMesh, Jump(), Landed()
예시 주인공 캐릭터, 몬스터, AI 병사 등
  • 대부분의 3인칭/1인칭 캐릭터가 사용하는 클래스
  • CharacterMovementComponent의 존재로 걷기 / 점프 / 충돌 / 중력 등이 적용되며 구현되어 있음
  • Skeletal Mesh, Anim 등과의 기능적 연계도 되어 있음

정리

클래스 위치/회전 스폰 가능 조종 가능 걷기/중력 SkeletalMesh/애님
UObject
AActor
APawn ✅ (Controller)
ACharacter
  • Pawn에도 Skeletal Mesh나 Anim 등을 붙일 수 있지만
    그렇다면 차라리 ACharacter를 사용하는 것이 더 편리하다
    (이미 구현된 기능들이 존재하므로)

댓글남기기