경로는 /Game/PuzzlePlatforms/BP_PlatformTrigger이다.
//BPClass인 TriggerPlatform를 C++로 찾아보기
//FClassFinder을 사용한다.
ConstructorHelpers::FClassFinder<APlatformTrigger> PlatformTriggerBPClass(TEXT("/Game/PiuzzlePlatforms/BP_PlatformTrigger"));
//nullptr인지 확인한다.
//포인터가 저장되는곳은 .Calss이기에 꼭 기억하자
if (!ensure(PlatformTriggerBPClass.Class != nullptr)) return;
mPlatformTrigger = PlatformTriggerBPClass.Class;
//문자열을 얻어온다. 포인터이기에 *를 붙어 객체로 넘어가서 GetName()을 한다.
UE_LOG(LogTemp, Warning, TEXT("Found Class %s"), *mPlatformTrigger->GetName());
FClassFinder
docs.unrealengine.com
C++로 위젯에 엑세스하기위해서는 UMG 모듈을 추가해야한다. (기본적으로 안되어있음)
User Interface With UMG
Create a simple menu system using UMG.
docs.unrealengine.com
// Copyright Epic Games, Inc. All Rights Reserved.
using UnrealBuildTool;
public class PuzzlePlatforms : ModuleRules
{
public PuzzlePlatforms(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
//UMG를 의존성에 추가한다.
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "UMG" });
}
}
"UMG" 추가
설정 후 코드 빌드하고 UE에디터 실행
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("게임 인스턴스 생성자 호출"));
/*
//BPClass인 TriggerPlatform를 C++로 찾아보기
//FClassFinder을 사용한다.
ConstructorHelpers::FClassFinder<APlatformTrigger> PlatformTriggerBPClass(TEXT("/Game/PiuzzlePlatforms/BP_PlatformTrigger"));
//nullptr인지 확인한다.
//포인터가 저장되는곳은 .Calss이기에 꼭 기억하자
if (!ensure(PlatformTriggerBPClass.Class != nullptr)) return;
mPlatformTrigger = PlatformTriggerBPClass.Class;
//문자열을 얻어온다. 포인터이기에 *를 붙어 객체로 넘어가서 GetName()을 한다.
UE_LOG(LogTemp, Warning, TEXT("Found Class %s"), *mPlatformTrigger->GetName());
*/
//BPClass인 Menuclass찾기
ConstructorHelpers::FClassFinder<UUserWidget> MenuBPClass(TEXT("/Game/MenuSystem/WBP_MainMenu"));
//nullptr인지 확인한다.
//포인터가 저장되는곳은 .Calss이기에 꼭 기억하자
if (!ensure(MenuBPClass.Class != nullptr)) return;
//필드에 넣어준다. 실제 클래스는 .Class
mMenuClass = MenuBPClass.Class;
}
메뉴 UI를 Exec함수를 통해 로드를 하고 이를 새로운 레벨의 블루프린트에서 실행하여 자동으로 메뉴가 나오도록 하자.
//GameInstance에서 LoadMenu Exec 함수 생성
UFUNCTION(Exec, BlueprintCallable)
void LoadMenu();
void UPuzzlePlatformsGameInstance::LoadMenu()
{
//생성자에서 mMenuClass가 할당되지 않을경우 리턴한다. (이전 장에서 다룸)
if (!ensure(mMenuClass != nullptr)) return;
//CreateWidget<UUserWidget>함수로 위젯을 생성한다.
Menu = CreateWidget<UMainMenu>(this, mMenuClass);
if (!ensure(Menu != nullptr)) return;
Menu->Setup();
Menu->SetMenuInterface (this);
}
UFUNTION(Exec, BlueprintCallable) 키워드로 블루프린트에서 실행 가능하게 한다.
레벨 블루프린트에서 게임 인스턴스에서 Exec함수를 실행한다.
'unreal engine' 카테고리의 다른 글
[언리얼엔진] 언리얼엔진 C++ GameInstance 게임 인스턴스와 Exec (0) | 2022.07.10 |
---|---|
[언리얼엔진] C++로 트리거함수 콜백시키기, 트리거로 다른 오브젝트 작동 (0) | 2022.07.10 |
[언리얼엔진] C++로 트리거 재정의하기 (AddDynamic) (0) | 2022.07.10 |
[언리얼엔진] C++로 움직이는(왕복) 물체 만들기 (0) | 2022.07.10 |
[언리얼엔진] C++로 컴포넌트 생성하기 (0) | 2022.07.10 |