본문 바로가기
언리얼엔진

언리얼 엔진 4 C++ (UCLASS, UPROPERTY, USTRUCT, UENUM, UFUNCTION)

by 대니스 2023. 1. 25.

UCLASS 

UCLASS 정의

UCLASS : 스마트 포인터 규칙에 따라 UE4의 스마트 포인터 및 할당과 해제를 위한 메모리 관리 루틴을 사용하고 UE4 에디터에서 로드되고 읽을 수 있으며 블루프린트에서 마음대로 접근할 수 있다.

UCLASS 생성

1. 파일 -> 새로운 C++ 클래스... 선택

2. 파생되고 싶은 클래스를 선택하여 다음을 선택

 2-1. 모든 클래스 표시 선택

 2-2. Object 부모 클래스 선택 (UObject는 UE4 계층 구조의 최상위이다.)

3. 이름과 저장하고 싶은 경로를 결정하여 클래스 생성 선택

 

 

※ 이름.generated.h 를 #include 해야만 컴파일 할 수 있으며 UPROPERTY, UFUNCTION, UCLASS 같은 UE4 매크로가 사용된 결과를 만들 수 있다.

 

UCLASS 특징

Blueprintable : UE4 에디터 상 Class Viewer에서 블루프린트를 만들 수 있다.

BlueprintType : 이 키워드를 사용한 UCLASS를 다른 블루프린트에서 변수로 사용할 수 있다.

UPROPERTY

UPROPERTY 정의

UPROPERTY : UCLASS에서 사용하는 변수 문법이다.

UPROPERTY () 매크로에 전달된 매개변수

EditAnywhere : 블루프린트에서 직접 편집하거나 게임 레벨에 배치된 UCLASS 객체의 각 인스턴스를 편집할 수 있다.

EditDefaultsOnly : 블루프린트 값은 편집 가능하나 인스턴스마다는 불가능하다.

EditInstanceOnly : 기본 블루프린트에서는 안 되지만 게임 레벨에서 UClass 객체 인스턴스의 URPOPERTY() 매크로에 대해 수정할 수 있다.

BlueprintReadWrite : 블루프린트 다이어그램에서 읽기 쓰기가 가능한 속성을 말한다. 이 UPROPERTY()는 퍼블릭 멤버 변수에 대해서만 BlueprintReadWrite를 지정해야 한다.

BlueprintReadOnly : C++에서 설정돼야 하고 블루프린트에서 변경할 수 없다.(읽기만 가능하다.)

Category : 항상 UPROPERTY()는 카테고리를 명시해야 한다. 이 카테고리는 속성 에디터에서 UPROEPRTY()가 나타날 하위 메뉴를 보여준다.

// 클래스 이름.h

#pragma once

#include "CoreMinimal.h"
#include "UObject/NoExportTypes.h"
#include "UserProfile.generated.h"

UCLASS()
class CPP_PRACTICE_API UUserProfile : public UObject
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Stats)
		float Armor;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Stats)
		float HpMax;
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Stats)
		FString Name;
};

USTRUCT

USTRUCT  정의

USTRUCT : UE4에서 사용하는 구조체이다. 이를 사용하면 다른 어떤 UObject에서 파생된 블루프린트화된 클래스에 포함되고 지정된 동일 구조체 안에 텍스처, 색상 등을 그룹화할 수 있다.

UENUM

USTRUCT  정의

UENUM : UE4에서 사용하는 사용자 정의 열거형이다. 이 열거형을 사용하면 블루프린트에서 편집 가능한 드롭다운 메뉴를 만들 수 있다.

UFUNCTION

UFUNCTION 정의

UFUNCTION : C++ 클라이언트 코드와 블루프린트 다이어그램 모두에서 호출할 수 있는 C++함수이다. 

// 클래스 이름.h

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor_chapter02.generated.h"

UCLASS()
class CPP_PRACTICE_API AMyActor_chapter02 : public AActor
{
	GENERATED_BODY()
	
public:	
	// Sets default values for this actor's properties
	AMyActor_chapter02();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

	UFUNCTION(BlueprintCallable, Category = Properties)
		FString ToString();

};

USTRUCT(Atomic, BlueprintType)
struct FCustomStruct
{
	GENERATED_BODY()
public:
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		FString Texture;
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
		int32 color;
};

UENUM(BlueprintType)
enum class EFruit : uint8
{
	Stopped UMETA(DisplayName = "Stopped"),
	Moving UMETA(DisplayName = "Moving"),
	Attacking UMETA(DisplayName = "Attacking"),
};

 

⊙ 언리얼 버전 : 4.26