くーこのプログラマメモ

UE4などゲーム開発に関するメモ

デフォルトのLevelScriptActorを変更する方法

使用バージョン:UE4.24.2

f:id:shama-coo:20210113132910p:plain:w300

はじめに

レベルを作成した際の親クラスとして設定されるLevelScriptActorをプロジェクト設定より変更することができます。
例えばサブレベルの管理など各レベルに共通処理を実装したい場合に、独自のLevelScriptActorを設定することで対応することも可能です。

準備

LevelScriptActorを継承したクラスを作成します。

BPの場合

  1. プロジェクト設定 > エンジン - 基本設定を選択します。
  2. デフォルトクラスLevelScriptActorClass+アイコンを選択します。
    f:id:shama-coo:20210113133642p:plain:w300
  3. 任意の名前をつけて保存します。
    f:id:shama-coo:20210113133734p:plain:w180
  4. 作成したブループリントが自動で開きますのでコンパイルし保存します。
    f:id:shama-coo:20210113133915p:plain:w300

C++の場合

#pragma once

#include "CoreMinimal.h"
#include "Engine/LevelScriptActor.h"

#include "CustomLevelScriptActor.generated.h"


/**
 * カスタムLevelScriptActor
 */
UCLASS()
class ACustomLevelScriptActor : public ALevelScriptActor
{
    GENERATED_BODY()
};

デフォルトのLevelScriptActorを変更

  1. プロジェクト設定 > エンジン - 基本設定を選択します。
  2. デフォルトクラスLevelScriptActorClassに作成したLevelScriptActor を設定します。
    ※BPを作成した場合は自動で設定されます。
    f:id:shama-coo:20210113134041p:plain:w300
  3. エディタを再起動します。
    検証時はエディタ再起動することで新規レベル作成時に親クラスとして設定されるようになりました。
    新規レベル作成し、親クラスがLevelScriptActorのままだった場合はエディタを再起動してみてください。

注意

ULevelからLevelScriptActorを取得した際に、nullだった場合は該当レベルをコンパイルしてみてください。
※内部的にLevelScriptActorが生成されるのは、該当レベルのBPをコンパイルしたときのようです。

最後に

各レベルの共通処理の対応方法は他にもありますが、サブレベルの管理や何かしらの管理機能の初期化を待つ必要がある場合など状況によってはこの方法を検討していいかなと思います。