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 |