UE4.23以前では Level Sequence の LevelSequenceDirector を開くまでに手順が少し多く、
簡単に開きたかったので、某ねこのアイコンの人のツイートを参考に実装しました。
UE4.21からのEvent TrackのDirector BPを開く手順が少し多いので、Level Seuqneceアセットの右クリックメニューから開けるようにしてみた(AssetActionUtilityを使用。コードはコメントに追記)
— おかず (@pafuhana1213) March 6, 2019
Open Director Blueprint from context menu using Blutility https://t.co/GDz4xmikUk #UE4 #UE4Study
0.準備(前提)
UE4.23.1 言語は英語です。
プロジェクト名を TestProject としています。
1.Build.cs にモジュールを追記する
"LevelSequence" と "UnrealEd" を PublicDependencyModuleNames に追加します。
// 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 を開く関数を追加します。
コードは猫のアイコンの人のツイートにある動画のコメントに書かれています!
(なぜか並べ替えで新しい順にしないと表示されない)
// 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);
};
// 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_OpenSequenceDirector の GetSupportedClass をオーバーライドし、
ReturnNode の ReturnValue を Level Sequence にします。
6.動作確認。
ContentBrowser で適当な LevelSequence を右クリックし、 ScriptedActions → OpenSequenceDirectorBP を選択します。
LevelSequenceDirector が開けたら完成です!
7.最後に
1で Build.cs に追加した __UnrealEd__モジュールはエディタ用のモジュールなので、このままだとパッケージ化に失敗します。
この機能をモジュールに分けるか、 Build.cs 内でエディタービルドのみリンクするように修正する必要があります。