Unreal Engine/개념정리

UE5 - 컨텐츠의 기본 요소 (매크로, 클래스) 정리

KimGeon-U 2024. 12. 17. 17:35

개요

 

언리얼 엔진을 다루는 게임 클라이언트 개발자가 되기위해 학습을 하던 중, 콘텐츠 드로어에서 생성할 수 있는 다양한 클래스 들이 있었습니다.

폰, 액터, 캐릭터, 오브젝트와 같은 기본 클래스들이 있었으며, 각각 빙의할 수 있다, 걸어다닐 수 있다, 월드에 배치할 수 있다. 와 같은 기본적인 내용들만 적혀있었습니다.

또한 C++ 클래스를 작성하였을 때에는 UPROPERTY, UCLASS, UFUNCTION와 같은 자바의 어노테이션과 같은 상단에 적혀있는 매크로들이 존재하였습니다.

이와같이 다양한 클래스들과 매크로같은 기능들이 존재하였으며, 언리얼 엔진을 의도한대로 다루기 위해서는 기본적인 요소를 파악해야 한다고 생각하여 포스팅을 작성하게 되었습니다.

 

매크로

언리얼 엔진의 매크로는 클래스, 함수, 속성 등의 정보를 블루프린터,리플렉션과 같은 에디터와 런타임에서 사용할 수 있도록 메타데이터로 선언하는 기능입니다.

즉, 언리얼 엔진으로 프로그래밍시 언리얼 엔진이 새 클래스, 함수, 변수를 인식할 수 있게 도와주는 기능입니다.

 

특징

  • 리플렉션(Reflection)
    • 매크로로 선언된 객체의 속성 정보들을 런타임시에 조회, 제어 할 수 있다.
  • 블루프린트 연동
    • C++ 클래스에서 선언한 함수, 변수, 클래스들을 블루프린트에서 조회, 사용할 수 있다.
    • Ex) 변수에 UPROPERTY(VisibleAnywhere)를 선언함으로써, 블루프린트 내에서 조회 할 수 있다.

 

UCLASS()

  • 클래스 선언부에 사용되며, 해당 클래스는 언리얼 엔진에서 추적하여 조회, 사용 할 수있게 선언한다.
  • 런타임 환경에서 특정 클래스를 조회, 인스턴스 멤버 변수,함수를 호출할 수 있게 도와준다.
  • 클래스 디폴트 오브젝트(Class Default Object, CDO)라는 하나의 오브젝트를 유지한다.
  • 매개변수 Blueprintable, BlueprintType, NotBlueprintable, Abstract 등을 통해 접근 제어할 수 있다.
    • Blueprintable : 블루프린트에서 상속 가능하도록 선언한다.
    • BlueprintType : 블루프린트 변수로 사용할 수 있다.
    • NotBlutprintable : 블루프린트에서 상속할 수 없다.
    • Abstract : 추상 클래스로 선언한다. 객체를 직접 생성할 수 없다.

UFUNCTION()

  • 함수 선언부에 사용되며, 함수에 대한 메터 데이터를 추가하여 블루프린트, 네트워크와 같은 기능들에 대해 제어한다.
  • 매개변수 BlueprintCallable, BlutprintImplementableEvent, BlueprintNativeEvent, Server, Client, NetMulticast 등이 있다.
  • BlueprintCallable : 블루프린트에서 함수를 호출할 수 있도록 한다.
  • BlueprintImplementableEvent : C++ 에서 구현하지 않아도 블루프린트에서 구현 할 수 있는 이벤트를 정의한다.
  • BlueprintNativeEvent : C++ 함수에서 구현하였지만, 블루프린트에서 재 구현이 가능하도록 한다.
  • Server, Client, NetMulticast : 각각 서버, 클라이언트, 모든 클라이언트에서 실행하도록 한다.

UPROPERTY()

  • 클래스 메버 변수에 메타데이터를 추가하여 언리얼 엔진에서 변수의 동작들을 제어하도록 도와준다.
  • EditAnywhere : 언리얼 에디터에서 수정할 수있도록 도와준다.
    • Ex) 블루프린트에서 해당 멤버변수의 값을 수정한다.
  • BlueprintReadWrite : 블루프린트에서 수정,사용할 수 있도록 선언한다.
  • Replicated : 네트워크에서 동기화 한다.
  • Transient : 변수를 저장하지 않고 런타임에서만 사용하도록 설정한다.

 

기본 클래스

언리얼 엔진에서 게임을 만들면 다양한 객체들이 있습니다.

플레이어, 주변환경(나무, 벽, 돌 등..), 장비(무기, 갑옷, 총알 등..)을 구현하게 되며, 그에 어울리게 구현되어있는 클래스들이 있습니다.

기본 클래스 중 가장 대표적인 Actor, Pawn, Character, Object들에 대해 알아보겠습니다.

 

UObject Class

  • 언리얼 엔진 라이브러리 모든 클래스들의 최상위 부모 클래스.
  • 컨텐츠를 구성하는 기본 단위
  • UObject를 상속받는 클래스들은 GC를 통해 메모리 관리를 할 수 있다.
  • 게임플레이에 필요한 로직, 데이터 구조와같은 게임에서 필요한 기본 기능들을 포함하고 있다.

 

AActor Class

  • 게임 월드의 Transform을 가지는 객체들의 행동을 구현시에 사용하는 클래스
  • 게임 내부의 물리적 충돌, 렌더링, 네트워크 등의 처리가 가능하다.
  • 컴포넌트 기반으로 설계되어 메쉬, 라이트와 같은 다양한 구성 요소들을 추가할 수 있다.
  • UObject를 상속받고 있다.
  • 동적객체, 정적객체들을 구현시에 사용한다.
    • 동적 객체(총알, 미사일, 차량 등..), 정적 객체(건물, 나무 등..)

 

APawn Class

  • 게임 월드에서 플레이어 혹은 AI에 의해 제어될 수 있는 Actor
    • PlayerController 또는 AIController을 통해 행동을 결정할 수 있다.
    • AActor클래스와 다르게 컨트롤러와 연결 할 수 있다.
  • AActor 클래스를 상속받고있다.
  • 카메라, 플레이어가 조작할 수 있는 탈것, AI를 통해 행동하는 캐릭터등에 사용한다.

 

ACharacter Class

  • 캐릭터의 이동, 애니메이션을 담당하는 클래스
  • APawn클래스를 상속받고 있다.
  • Component기반으로 설계되어 캐릭터의 이동, 물리적 충돌, 외형등을 런타임 환경에서 제어할 수 있다.
    • Capsule Component : 캐릭터의 충돌을 처리
    • Character Movement Component : 캐릭터의 이동관련 처리
    • Mesh Component : 캐릭터의 외형(스켈레탈 메쉬 등)을 표현
  • 플레이어 캐릭터, AI 캐릭터 등 이동이 필요한 것들

 

이상으로 클래스들에 필요한 기본적인 기능들에 대해 알아보았습니다.

다음 클래스 관련 포스팅은 객체(액터)가 언제 어떻게 생성되는지, 그리고 어떻게 사라지는지, 어떻게 관리하는지에 대한

언리얼 엔진의 객체 라이프사이클에 대해 알아보겠습니다.