🎮Unreal4/Basic

[UE4] Actor C++ 클래스 기본 생성 코드 (클래스 선언, 직렬화 매크로,

공대 컴린이 2023. 2. 26. 23:05
728x90

📗 직렬화 사용

A ob; 라는 변수를 선언했을 때 A 객체 자체의 주소에 접근할 수 없다보니 바이트스트림 형태로 바꾸어 접근할 수있다. 따라서 어느 CPU나 어느 RAM이든 문제없이 I/O를 통해 접근할 수 있게 하는 기능이 직렬화 혹은 역직렬화이다.

 

프로그램을 내부적으로 사용할 때는 에디터에 공개할 필요가 없기 때문에 직렬화를 사용하지 않는다. 그러나 언리얼 엔진에서 게임을 개발할 때 사용하는 블루프린트도 에디터 소속이기 때문에 직렬화를 해줘야 블루프린트에 접근하여 게임을 개발할 수 있다. 즉, 에디터에서 직렬화하여 공개하고, 블루프린트에도 공개하라는 옵션을 설정하면 언리얼 엔진에서 C++을 통한 개발작업이 이뤄질 수 있다.

📙 클래스 선언

일반적으로 클래스를 선언할 때

class (프로젝트명 = 모듈명)_API (클래스명, 앞에 접두사 U/A 가 붙음)

와 같은 구조를 갖추어 선언한다.

예를 들면 "class    UEProject_API     AC01_Property" 와 같다.

프로그래머가 내부적으로 직접 사용할 클래스들은 UObject를 상속받지 않는다. UObject를 상속받은 클래스부터가 가비지 콜렉터에 의해 메모리가 자동관리 된다.

📘 직렬화 매크로

 

언리얼 C++ 액터 기본 생성 코드

이후 직렬화 코드는 클래스의 선언 위에 UCLASS, UPROPERTY, UFUNCTION 선언을 붙인다.

클래스를 직렬화하면 직렬화 코드가 필요하므로, 직렬화 코드가 들어간 매크로인 GENERATED_BODY() 명령이 붙는다.

 

직렬화는 코드를 그대로 치환하기 때문에 UCLASS() - class선언 사이와, class선언 - GENERATED 사이에는 그 어떠한 코드도 들어가면 안된다.

 

또한 위 코드는 AActor를 상속받았기 때문에 이하 클래스는 모두 A 접두사가 붙게 된다. (UObject를 상속받으면 U가 붙음)

위 코드는 언리얼 컴파일러, 정확히 언리얼 헤더에 의해 자동으로 생성되는 부분들이다. 이때 사용되는 헤더가 바로

#include "클래스명.generated.h" 이다.

위 헤더 역시 클래스를 직렬화할 때 한 쌍으로 사용되기 때문에 절대 빠져서는 안된다.

 

또한 언리얼은 기본적으로 맨 위에 "CoreMinimal.h" 헤더를 넣는다. 이 헤더는 언리얼의 핵심 코드만을 넣어놓았다.

 

직렬화할 변수나 함수 위에는 반드시 매크로가 들어가야 한다.

  • 멤버변수 UPROPERTY()
  • 함수 UFUNCTION()
  • 클래스 UCLASS()

이때 매크로가 소속된 클래스나 함수가 직렬화되어있지 않고 안에있는 변수에만 직렬화가 되어있으면 소용이 없다.

728x90