관리 메뉴

Mini

[UE5] 리플렉션 시스템 본문

UE5

[UE5] 리플렉션 시스템

Mini_96 2024. 5. 24. 22:36

1. obj.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

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

/**
 * 
 */
UCLASS()
class AURA_API UAuraObject : public UObject
{
	GENERATED_BODY()

public:
	UAuraObject();

	UFUNCTION()
	void HelloUnreal();

	const FString& GetObjectName() const { return Name;}

protected:
	UPROPERTY()
	FString Name; //
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "AuraObject.h"

UAuraObject::UAuraObject()
{
	Name = TEXT("asdf");
}

void UAuraObject::HelloUnreal()
{
	
}

1. FString 은 유사 포인터라고 생각하면 될듯하다.

리턴시 : FString& 타입임

사용시 * Name으로 사용

 

2.instance.cpp

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/GameInstance.h"
#include "AuraGameInstance.generated.h"

/**
 * 
 */
UCLASS()
class AURA_API UAuraGameInstance : public UGameInstance
{
	GENERATED_BODY()

public:

protected:
	virtual void Init() override;

	
	
};
// Fill out your copyright notice in the Description page of Project Settings.


#include "AuraGameInstance.h"

#include "AuraObject.h"

void UAuraGameInstance::Init()
{
	Super::Init();

	auto Obj1= NewObject<UAuraObject>();

	UE_LOG(LogTexture,Log,TEXT("obj1`s name is : %s"),*Obj1->GetObjectName());
	//문자열 접근시 *으로 접근해야함

	auto NameProperty = UAuraObject::StaticClass()->FindPropertyByName(TEXT("Name"));

	FString CompileTimeObjName;
	if(nullptr!=NameProperty)
	{
		//컨테이너안에서 이름가져와서 &변수에 넣어줘
		NameProperty->GetValue_InContainer(Obj1,&CompileTimeObjName);
		UE_LOG(LogTexture,Log,TEXT("CompileTimeObjName`s name is : %s"),*CompileTimeObjName);
		//문자열 접근시 *으로 접근해야함
		
	}
}

1. 직접 Get함수로 이름을 가져와도 되고,

2. 자동으로 만들어주는 리플렉션함수인 StaticClass를 통해 가져와도 같은결과가 나온다!