클래스 계층 구조와 리스코프 치환 원칙

  • 리스코프 치환 원칙 (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 모델러를 구하고 싶다는 생각이 들었습니다.