클래스 계층 구조와 리스코프 치환 원칙
- 리스코프 치환 원칙 (LSP):
- 하위 클래스는 언제나 상위 클래스를 대체할 수 있어야 한다.
- 상위 클래스의 기능을 확장하거나 특수화할 수 있지만, 호환성은 유지해야 한다.
- 언리얼 엔진의 클래스 구조:
- Actor → Pawn → Character의 계층은 점차적으로 더 구체적인 기능을 제공.
- 각 클래스는 리스코프 치환 원칙을 충실히 따르며, 상속을 통해 확장 가능.
1. UObject 클래스
- 역할: 언리얼 엔진의 모든 클래스의 기본 클래스(Base Class).
- 특징:
- 게임 세계 안에서 직접 배치되거나 사용되지 않음.
- 데이터 관리, 애셋 로딩, 로직 처리와 같은 다양한 시스템의 기초를 형성.
- 메모리 관리와 Garbgage Collection(가비지 컬렉션)을 지원.
- 예시:
- 데이터 테이블, UI 위젯, 오디오 큐.
2. Actor 클래스
- 역할: 게임 세계(월드) 내에서 존재할 수 있는 모든 오브젝트의 기본 클래스.
- 특징:
- 게임 월드에 스폰(배치)될 수 있음.
- Transform(위치, 회전, 스케일) 정보를 가짐.
- 컴포넌트를 통해 다양한 기능 추가 가능 (예: Static Mesh Component, Light Component).
- 이벤트와 로직을 포함해 게임플레이 요소를 구현할 수 있음.
- 주요 기능:
- Tick: 매 프레임 실행되는 로직을 작성할 수 있음.
- BeginPlay: 게임 시작 시 호출되는 초기화 함수.
- 예시:
- 문, 아이템, 장애물, 이동하는 플랫폼 등.
3. Pawn 클래스 (Actor를 상속)
- 역할: 플레이어 또는 AI가 제어할 수 있는 오브젝트.
- 특징:
- Actor 클래스의 하위 클래스.
- Controller를 통해 플레이어나 AI가 조작할 수 있음.
- 자체적으로 이동 기능이 구현되지 않음(직접 구현 필요).
- 단순히 AI 또는 플레이어의 컨트롤 가능한 몸체 역할.
- 사용 예시:
- 탱크, 비행기, NPC, 기본적인 캐릭터(자유로운 커스터마이징+성능 최적화에 유리)
- 주요 함수:
- PossessedBy: 이 Pawn을 제어하는 컨트롤러가 설정될 때 호출.
- UnPossessed: 컨트롤러가 이 Pawn을 더 이상 제어하지 않을 때 호출.
4. Character 클래스 (Pawn을 상속)
- 역할: 걷기, 점프, 중력과 같은 움직임이 기본적으로 구현된 Pawn.
- 특징:
- Capsule Component: 캐릭터의 충돌을 정의.
- Character Movement Component: 이동 및 점프, 낙하 등의 복잡한 이동 메커니즘을 기본 제공.
- Skeletal Mesh와 Animation 시스템을 사용하여 캐릭터의 외형과 애니메이션 적용 가능.
- 플레이어 캐릭터나 NPC 같은 복잡한 캐릭터를 쉽게 구현할 수 있음.
- 사용 예시:
- 플레이어 캐릭터
- 주요 기능:
- Jump: 캐릭터가 점프하도록 명령.
- MoveForward, MoveRight: 기본 입력과 연동하여 캐릭터 이동 구현.
- 중력, 충돌 처리.
- 애니메이션 처리.
클래스 비교
| UObject | 모든 클래스의 기본 클래스. 직접 배치되지 않음. |
데이터 관리, 가비지 컬렉션 | UI 위젯, 데이터 테이블, 오디오 큐 |
| Actor | 게임 월드 내 배치 가능한 모든 오브젝트의 기본 클래스. | Transform, Tick, BeginPlay | 문, 아이템, 장애물 |
| Pawn | 플레이어 또는 AI가 제어 가능한 Actor. | Controller 연동, Possess 기능 | 탱크, 비행기, AI 제어 가능한 몸체 |
| Character | 이동, 중력, 점프가 구현된 Pawn. | Character Movement Component, Animation | 플레이어 캐릭터, NPC |
✏️ 내일은 Pawn 클래스로 Character 클래스의 기능들을 구현해볼 예정입니다. 그 전에 간략하게 관련 클래스 계층 구조를 알아봤습니다. 고양이 같은 동물을 구현해보고 싶은데 리깅된 무료 3D 모델을 아직 못 구했네요ㅜ 유능한 3D 모델러를 구하고 싶다는 생각이 들었습니다.
'TIL > C++와 UE' 카테고리의 다른 글
| 회전 관련 함수 및 Pawn 클래스 Look 함수 (1) | 2025.01.27 |
|---|---|
| 충돌 검사 (0) | 2025.01.24 |
| Pawn 클래스 다루기 (0) | 2025.01.23 |
| 액터 Transform을 위한 좌표계와 부동 소수점 연산 (0) | 2025.01.21 |
| 언리얼 엔진 C++ 빌드 프로세스 (0) | 2025.01.20 |