http://egloos.zum.com/sweeper/v/3208657
[UE4] ConstructorHelper::FObjectFinder/FClassFinder
1. ConstructorHelper 참고 : 애셋 레퍼런싱의 생성시간 레퍼런싱 이름에서 알 수 있듯이 ConstructorHelper는 UObject의 Constructor(생성자)에서만 사용 가능하다. (즉, CDO 제작에서만 사용된다는 얘기) 아래 FObj
egloos.zum.com


FClassFinder을 이용하여 PlatformTrigger을 찾아보자
#include "PlatformTrigger.h" GameInstanc의 생성자에서 찾을것이기에 헤더를 포함시킨다. 위 UObject/.... 도 포함시킨다.

#include "PlatformTrigger.h" // PlatformTrigger을 찾기위해 #include "UObject/ConstructorHelpers.h" //FClassFinder을 사용하기위해 UPuzzlePlatformsGameInstance::UPuzzlePlatformsGameInstance(const FObjectInitializer& ObjectInitializer) { UE_LOG(LogTemp, Warning, TEXT("생성자")); //BPClass를 찾는다 ConstructorHelpers::FClassFinder<APlatformTrigger> PlatformTriggerBPClass(TEXT("/Game/PiuzzlePlatforms/BP_PlatformTrigger")); //nullptr인지 확인한다. //포인터가 저장되는곳은 .Calss이기에 꼭 기억하자 if (!ensure(PlatformTriggerBPClass.Class != nullptr)) return; //문자열을 얻기 위해서 *을 붙여준다 UE_LOG(LogTemp, Warning, TEXT("Found Class %s"), *PlatformTriggerBPClass.Class->GetName()); } 
*WBP UMG 모듈은 ClassFinder로 찾을 수 없다.

Build.cs에서 UMG 추가

프로젝트 재생성을하여 Build.cs 수정사항 적용
https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Blueprint/UUserWidget/
UUserWidget
The user widget is extensible by users through the WidgetBlueprint.
docs.unrealengine.com
#include "Blueprint/UserWidget.h" // ClassFinder가 UUserWidget을 취할 수 있다. 
FClassFinder의 리턴타입은 TSubclassOf<T> 이다. 이를 저장하기 위해서는
private: TSubclassOf<class UUserWidget> mMenuClass; TSubClassOf<class UUserWidget>으로 해야함. 헤더파일에는 include가 안되기에 class UUserWidget으로 명시한다.
TSubclassOf
docs.unrealengine.com
Build.cs에서 UMG없이 빌드할경우

void UPuzzlePlatformsGameInstance::Init() { UE_LOG(LogTemp, Warning, TEXT("초기화")); //문자열을 얻기 위해서 *을 붙여준다 UE_LOG(LogTemp, Warning, TEXT("Found Class %s"), *mMenuClass->GetName()); } UPuzzlePlatformsGameInstance::UPuzzlePlatformsGameInstance(const FObjectInitializer& ObjectInitializer) { UE_LOG(LogTemp, Warning, TEXT("생성자")); //TriggerPlatform 찾아보기 ////BPClass를 찾는다 //ConstructorHelpers::FClassFinder<APlatformTrigger> PlatformTriggerBPClass(TEXT("/Game/PiuzzlePlatforms/BP_PlatformTrigger")); // ////nullptr인지 확인한다. ////포인터가 저장되는곳은 .Calss이기에 꼭 기억하자 //if (!ensure(PlatformTriggerBPClass.Class != nullptr)) return; // ////문자열을 얻기 위해서 *을 붙여준다 //UE_LOG(LogTemp, Warning, TEXT("Found Class %s"), *PlatformTriggerBPClass.Class->GetName()); //Menuclass찾기 //BPClass를 찾는다 ConstructorHelpers::FClassFinder<UUserWidget> MenuBPClass(TEXT("/Game/MenuSystem/WBP_MainMenu")); //nullptr인지 확인한다. //포인터가 저장되는곳은 .Calss이기에 꼭 기억하자 if (!ensure(MenuBPClass.Class != nullptr)) return; //필드에 넣어준다. 실제 클래스는 .Class mMenuClass = MenuBPClass.Class; } 
'unreal engine' 카테고리의 다른 글
| [언리얼엔진] ue4 위젯 UI 입력 모드 변경하기 (입력모드, 커서보이기) (0) | 2022.02.27 |
|---|---|
| [언리얼엔진] C++에서 언리얼 모션 그래픽(UMG) 로드 및 표시하기 (0) | 2022.02.22 |
| [언리얼엔진] WBP 앵커 + Host, Join UI 만들기 (0) | 2022.02.20 |
| [언리얼엔진] ClientTravel (클라이언트트래블) (0) | 2022.02.19 |
| [언리얼엔진] ServerTravel (서버트래블) (0) | 2022.02.18 |