1. Object
1 - 1. UObject
UObject는 언리얼이 설계한 새로운 시스템의 단위 오브젝트로 언리얼의 모든 객체가 상속하는 베이스 클래스이다.
C++ 오브젝트(네이티브 클래스)
- 저수준의 빠른 처리를 위한 기능 구현에 사용한다.
- 접두사 F
UObject 오브젝트
- C++ 오브젝트에 객체지향 설계를 위한 다양한 기능을 추가한 오브젝트이다.
- 콘텐츠 제작에 관련된 복잡한 설계 구현에 사용한다.
- 접두사 U
1 - 2. UHT(Unreal Header Tool)
UObject를 상속하면 다양한 기능을 제공하는데, 이 기능을 사용하기 위해서는 헤더 파일에서 전처리 단계를 거쳐 필요한 정보를 수집해야 한다. 이러한 전처리 단계는 UHT에서 이루어진다.
언리얼 프로젝트 빌드 시 우선 UHT는 소스 코드를 분석하여 .generated.h 소스 코드를 생성한다. 그 후 컴파일러가 .h, .cpp, .generated.h 파일을 컴파일하여 빌드를 완료한다. 이때 generated.h 파일에는 매크로 등과 같은 메타 데이터를 담고 있다.
메타 데이터란?
'속성정보'라고도 불리는 메타데이터는 '데이터에 관한 구조화된 데이터', '다른 데이터를 설명해 주는 데이터'이다.
- UCLASS() 매크로: UObject임을 명시.
- UPROPERTY 매크로: 에디터나 블루프린트 상에 변수를 노출시키고 싶을 때 사용.
- UFUNCTION 매크로: 블루프린트에서 함수를 불러올 수 있게 함.
1 - 3. 다양한 기능
UObject가 제공하는 기능들은 다음과 같다.
- CDO(Class Default Object): 클래스의 기본 값과 타입 정보 제공하여 기본 값을 효과적으로 관리할 수 있다.
- GC(Garbage Collection): 참조되지 않는 객체를 메모리에서 자동 해제 할 수 있다.
- Refelction: 객체 정보를 런타임에서 실시간 조회할 수 있다. 즉, 컴파일 단계에서는 블루 프린트의 존재를 모르지만 런타임에서는 블루 프린트의 데이터를 참조할 수 있도록 한다.
- Serialization: 객체와 속성 정보를 바이트 스트림으로 저장, 전송할 수 있다.
- Delegate: 객체 간의 결합을 낮출 수 있는 델리게이트 기능을 제공한다.
- Replication: 네트워크 상에서 객체 간에 동기화를 할 수 있다.
- Editior Intergration: 언리얼 에디터 인터페이스를 통해 값을 편집할 수 있다.
2. Actor
Actor는 레벨에 배치할 수 있는 오브젝트이다. 레벨에 있는 모든 것이 액터라고 볼 수 있다.
- 모든 액터는 Transform이 존재한다.
- 컴포넌트들로 구성되어 있다.
- 루트 컴포넌트가 그 액터를 대표하여 액터의 위치가 곧 루트 컴포넌트의 위치가 된다.
- AActor는 베이스 액터 클래스이다.
2 - 1. 특수 액터
기본 액터에 일정한 기능이 내장된 특수 액터 유형이 있다.
Pawn
- 제어 가능한 게임 오브젝트로 플레이어나 AI 오브젝트에 사용한다.
- 움직일 수 있으며 충돌이 가능하다.
- 컨트롤러 소유를 통해 플레이어나 AI에 의해 움직인다.
Character
- 폰의 자식으로 이족 보행과 같은 아바타에 사용된다.
GameMode
- 게임에 대한 기본 규칙들이 지정된다.
- 존재하는 플레이어와 관람자의 수는 물론, 허용된 플레이어와 관람자 최대 수 등을 설정할 수 있다.
- 플레이어가 게임에 들어오는 방식, 스폰 위치 선택 규칙과 기타 스폰/리스폰 동작 포함 가능.
- 게임 일시 정지 가능 여부, 게임 일시 정지 처리 방식.
- 레벨 간의 전환, 게임의 시네마틱 모드 시작 여부 포함.
2 - 2. 모빌리티
액터에는 모빌리티라는 프로퍼티가 존재한다. 이를 사용해서 객체가 게임 내부에서 움직이지 않는 것(스태틱)인지, 움직이는 것(무버블)인지를 결정한다. 만약 객체를 움직여야 한다면 무버블로 설정하는 것이 기본 조건이다.
처음부터 모든 액터를 무버블로 설정하면 되지 않을까?라는 생각을 할 수도 있다. 그러나 라이팅과 섀도잉을 위해서 구분이 필요하다. 게임에서 실시간으로 빛과 그림자를 계산하는 것은 굉장히 부하가 높은 일이다. 하지만 게임에서 어떤 물체가 움직이지 않을 것이며 광원도 움직이지 않는다고 확정된다면, 빛과 그림자를 미리 계산하여 실시간 계산을 하지 않아도 된다.
3. Component
Component는 액터에 부착되는 것으로 액터에 어떤 컴포넌트가 부착되느냐에 따라 그 역할이 결정된다.
UActorComponent는 베이스 컴포넌트 클래스이다.
- Transform이 없다.
- Rendering, Collision이 없다.
USceneComponent는 Transform이 있는 UActorComponent이다.
- 월드에 배치 가능한 다른 컴포넌트들의 부모 클래스가 되는 컴포넌트이다.
- 충돌, 물리, 렌더링 기능이 없어 가볍기 때문에 계층 구조에서 더미로 활용하기 좋다.
UPrimitiveComponent는 렌더링, 충돌이 있는 USceneComponet이다.
참고 블로그
'Unreal' 카테고리의 다른 글
언리얼에서 컴포넌트란? (0) | 2025.01.22 |
---|---|
기본 Actor 클래스 코드 구조 (0) | 2025.01.22 |
C++ Actor 클래스 삭제하는 법 (0) | 2025.01.21 |
Unreal 엔진 빌드 프로세스 (0) | 2025.01.21 |
프로젝트 폴더 구조 이해하기 (0) | 2025.01.20 |