LevelSequenceDirector を簡単に開けるようにした


UE4.23以前では Level Sequence の LevelSequenceDirector を開くまでに手順が少し多く、
簡単に開きたかったので、某ねこのアイコンの人のツイートを参考に実装しました。

※4.24ではスパナアイコンから開けます。

0.準備(前提)

UE4.23.1 言語は英語です。
プロジェクト名を TestProject としています。

1.Build.cs にモジュールを追記する

"LevelSequence""UnrealEd"PublicDependencyModuleNames に追加します。

TestProject.Build.cs
// Fill out your copyright notice in the Description page of Project Settings.

using UnrealBuildTool;

public class TestProject : ModuleRules
{
    public TestProject(ReadOnlyTargetRules Target) : base(Target)
    {
        PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;

        PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

        PublicDependencyModuleNames.AddRange(new string[] { "LevelSequence", "UnrealEd" });  // この1行を追加

        PrivateDependencyModuleNames.AddRange(new string[] {  });

        // Uncomment if you are using Slate UI
        // PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });

        // Uncomment if you are using online features
        // PrivateDependencyModuleNames.Add("OnlineSubsystem");

        // To include OnlineSubsystemSteam, add it to the plugins section in your uproject file with the Enabled attribute set to true
    }
}

2.UBlueprintFunctionLibrary を継承したクラスを作成する

UBlueprintFunctionLibrary を継承したクラスに LevelSequenceDirector を開く関数を追加します。
コードは猫のアイコンの人のツイートにある動画のコメントに書かれています!
(なぜか並べ替えで新しい順にしないと表示されない)

MyBlueprintFunctionLibrary.h
// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "MyBlueprintFunctionLibrary.generated.h"

/**
 * 
 */
UCLASS()
class TESTPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

    // シーケンサーのディレクターを開く.
    UFUNCTION(BlueprintCallable)
    static void OpenDirectorBP(ULevelSequence* LevelSequence);
};

MyBlueprintFunctionLibrary.cpp
// Fill out your copyright notice in the Description page of Project Settings.


#include "MyBlueprintFunctionLibrary.h"
#include "LevelSequence.h"
#include "Kismet2/KismetEditorUtilities.h"


void UMyBlueprintFunctionLibrary::OpenDirectorBP(ULevelSequence* LevelSequence)
{
    if(!IsValid(LevelSequence))
    {
        return;
    }
    UBlueprint* DirectorBP = LevelSequence->GetDirectorBlueprint();
    if(DirectorBP && DirectorBP->FunctionGraphs.Num() > 0)
    {
        FKismetEditorUtilities::BringKismetToFocusAttentionOnObject(DirectorBP->FunctionGraphs[0]);
    }
}

3.Blutilityを作成します。

エディタを立ち上げてBlutilityを作成します。
AddNew → Editor Utilities → Editor Utility Blueprint を選択し、 AssetActionUtility を選んで Select
名前は適当でいいです。(EUB_OpenSequenceDirectorにしました。)

4.関数の作成

先ほど作成した EUB_OpenSequenceDirector を開き、関数を作成していきます。
関数名は OpenSequenceDirectorBP としました。
BPは下記の画像です。

5.サポートするクラスを指定します。

先ほどと同じく EUB_OpenSequenceDirectorGetSupportedClass をオーバーライドし、
ReturnNode の ReturnValue を Level Sequence にします。

6.動作確認。

ContentBrowser で適当な LevelSequence を右クリックし、 ScriptedActions → OpenSequenceDirectorBP を選択します。
LevelSequenceDirector が開けたら完成です!

7.最後に

1で Build.cs に追加した UnrealEdモジュールはエディタ用のモジュールなので、このままだとパッケージ化に失敗します。
この機能をモジュールに分けるか、 Build.cs 内でエディタービルドのみリンクするように修正する必要があります。