본문 바로가기

[Unreal4] 언리얼C++ 구조체 사용하기

Kwonriver 2022. 5. 19.
728x90

 

언리얼에서 구조체를 만드는 방법은 여러가지가 존재한다.

가장 기본적으로 C++ 에서 구조체를 만드는 방식과 동일하게 만들 수 있는데 이 구조체는 C++ 코드에서만 사용이 가능하며 언리얼 에디터나 블루프린트에서는 사용할 수 없다.

 

struct MyStruct
{
int nAge;
int nNumber;
string strName;
};

 

두번째 방법으로는 블루프린트 구조체를 만드는 방법이다. 이 구조체는 블루프린트에서만 사용이 가능하며 C++ 코드에서는 사용할 수 없다.

 

컨텐츠 브라우저에서 우클릭 - 블루프린트 - 구조체를 클릭하면 블루프린트 전용 구조체가 생성되며 만들어진 구조체를 더블클릭해 구조체 편집기에서 구조체를 구성할 수 있다.

 

 

세번째 방법은 언리얼 C++ 의 매크로를 이용해 생성하는 방법이다. 이 방법은 언리얼 C++코드 뿐 아니라 블루프린트에서도 사용할 수 있으나 앞선 방식들보다 더 복잡하다.

 

 

파일 - 새로운 C++ 클래스 - 없음 선택하고 클래스를 생성한다.

특정 클래스 내에서만 사용할 구조체는 해당 클래스의 파일에서 선언하여 사용해도 되고 범용적으로 여러 곳에서 사용할 구조체는 공용 헤더를 생성해 모아두면 편리하다.

 

 

부모클래스가 없는 상태로 클래스를 생성했기 때문에 #include "MyStruct.generated.h" 를 선언한다. 이 선언은 #include 중 가장 아래에 있어야만 한다.

 

구조체를 만들기 위해서 USTRUCT()를 사용하여 추가한다.

구조체의 이름은 항상 F로 시작한다. 규칙이므로 따른다.

UPROPERTY를 붙여 댕글링 포인터를 예방하고 변수의 사용성에 대해 정의한다.

 

Atomic은 해당 구조체가 항상 1개의 단위로 직렬화됨을 의미한다. 이를 사용하지 않으면 디테일 창에 구조체 내부가 나오지 않는다. 

BlueprintType은 해당 구조체가 블루프린트에서 사용될 수 있음을 의미한다. 이를 사용하지 않으면 블루프린트에서 구조체를 사용할 수 없다.

C++코드 상에서는 항상 사용할 수 있다.

 

 

위 방법으로 만든 언리얼C++구조체는 언리얼 컨텐츠 브라우저에 나오지 않으며 액터 클래스에서 선언 후 사용이 가능하다.

 

 

이렇게 추가하고 컴파일 한 다음 액터를 배치하고 디테일 창을 보면 

 

 

이렇게 구조체가 추가되어 있는 것을 볼 수 있다.

 

블루프린트에서는 변수를 생성해 변수의 자료형을 변경하거나 이벤트 그래프 우클릭을 통해 만들어서 사용할 수 있다.

 

 

728x90