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

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

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">UE4.21からのEvent TrackのDirector BPを開く手順が少し多いので、Level Seuqneceアセットの右クリックメニューから開けるようにしてみた（AssetActionUtilityを使用。コードはコメントに追記）<br>Open Director Blueprint from context menu using Blutility <a href="https://t.co/GDz4xmikUk">https://t.co/GDz4xmikUk</a> <a href="https://twitter.com/hashtag/UE4?src=hash&amp;ref_src=twsrc%5Etfw">#UE4</a> <a href="https://twitter.com/hashtag/UE4Study?src=hash&amp;ref_src=twsrc%5Etfw">#UE4Study</a></p>&mdash; おかず (@pafuhana1213) <a href="https://twitter.com/pafuhana1213/status/1103316994747592704?ref_src=twsrc%5Etfw">March 6, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


※4.24ではスパナアイコンから開けます。
![OpenDirectorBP_UE4.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323162/798576df-e18a-ec3f-fcf0-a121824545c8.png)



# 0.準備（前提）
UE4.23.1 言語は英語です。
プロジェクト名を TestProject としています。


# 1.Build.cs にモジュールを追記する
__"LevelSequence"__ と __"UnrealEd"__ を __PublicDependencyModuleNames__ に追加します。

```C#: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 を開く関数を追加します。
コードは猫のアイコンの人のツイートにある動画のコメントに書かれています！
（なぜか並べ替えで新しい順にしないと表示されない）

```Cpp: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);
};

```

```Cpp: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は下記の画像です。
![OpenSequenceDirectorBP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323162/a0e8be06-bd35-cc76-fbc0-8f40fa08e956.png)

# 5.サポートするクラスを指定します。
先ほどと同じく __EUB_OpenSequenceDirector__ の __GetSupportedClass__ をオーバーライドし、
ReturnNode の ReturnValue を Level Sequence にします。

![GetSupportedClass.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323162/fbe841fe-b453-82ab-dd13-0b042c6fd93b.png)

# 6.動作確認。
ContentBrowser で適当な LevelSequence を右クリックし、 ScriptedActions → OpenSequenceDirectorBP を選択します。
LevelSequenceDirector が開けたら完成です！

![OpenBP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/323162/eb004f87-cdb0-3e23-44c1-070e64e644c2.png)

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