UObject,AActor,APawn,Acharacter
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에 저장된다)
- 리플렉션(Reflection)
-
- 시리얼라이즈(Serialization)
- 객체의 데이터를 저장/로드/전송 가능한 형태로 변환하는 기능
UObject 기반 클래스에 대하여 자동 지원
UPROPERTY() 가 붙은 필드는 기본적으로 시리얼라이즈 됨
- 시리얼라이즈(Serialization)
반대로 이러한 기능이 필요없는 클래스라면 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를 사용하는 것이 더 편리하다
(이미 구현된 기능들이 존재하므로)
댓글남기기