概要
UnrealEngine のレベルブループリントについてのメモ書きです。
C++での差し替え方法について。
環境
Windows10
Visual Studio 2017
UnrealEngine 4.26
参考
以下を参考にさせて頂きました、ありがとうございます。
UE公式:Level ブループリント
【UnrealC++】⑩レベルブループリント【UE4】
C++ でのレベルブループリントの差し替え
C++でのクラス用意
ALevelScriptActor を継承したクラスを用意します。
関連コード
Engine/Source/Runtime/Engine/Classes/Engine/LevelScriptActor.h
以下サンプル、イベントMyEvent
を追加しています。
MyLevelScript.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/LevelScriptActor.h"
#include "MyLevelScript.generated.h"
UCLASS()
class MYPROJECT3_API AMyLevelScript : public ALevelScriptActor
{
GENERATED_BODY()
public:
AMyLevelScript();
virtual ~AMyLevelScript()=default;
protected:
virtual void BeginPlay() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
public:
// 追加するイベント
UFUNCTION(BlueprintImplementableEvent)
void MyEvent();
};
MyScriptActor.cpp
#include "MyLevelScript.h"
#include "Engine.h"
#include "Engine/LevelScriptActor.h"
AMyLevelScript::AMyLevelScript()
{
}
void AMyLevelScript::BeginPlay()
{
UE_LOG(LogTemp, Log, TEXT("AMyLevelScript::BeginPlay()"));
Super::BeginPlay();
}
void AMyLevelScript::EndPlay(const EEndPlayReason::Type EndPlayReason)
{
UE_LOG(LogTemp, Log, TEXT("AMyLevelScript::EndPlay()"));
Super::EndPlay(EndPlayReason);
}
レベルブループリントでの設定
クラス設定 -> クラスオプションで親ブループリントを差し替えます。
追加したイベント呼び出し
追加したスクリプトを検索して実行します。
処理負荷的に毎回検索して実行はよろしくないです。レベル側で開始/終了時にどこかで管理するようにすべきかと思います。
.cpp
// レベルスクリプト検索
TSubclassOf<AMyLevelScript> _FindClass;
_FindClass = AMyLevelScript::StaticClass();
TArray<AActor*> _ActorList;
UGameplayStatics::GetAllActorsOfClass(GetWorld(), _FindClass, _ActorList);
// 見つかったら実行
if(_ActorList.Num() > 0){
AMyLevelScript* _ActorScript = Cast<AMyLevelScript>(_ActorList[0]);
if( _ActorScript ){
// イベント実行
_ActorScript->Restart();
}
}
まとめ
あまりレベルブループリントを使わなかったのですが、C++と紐づけるなら(個人的には)使いやすくなるかも。