johnnyGameStudio’s blog

無能なゲームプログラマのぼやき ぎーくになりたい Twitter: https://twitter.com/JGS_Developer

【UE4】LevelSequenceでTrackとして追加されているActorのインスタンスを取得してイベントを呼び出す【UnrealEngine4】

はじめに

開発をしていてLevelSequence経由で発生させたいイベントがあり、LevelSequenceにBindされているActorの関数を呼び出そうと思ったら、SequenceDirector内でどうやってインスタンスを取得するのか調べてもわかりませんでした
Additional Event Receiversを使いたいのに、どこのサイトも「実際にレベルに配置する」のが前提で書かれており、Additional Event Receiversはレベルに配置しないと設定できないように思えたので動的に再生するLSを切り替えるケースではどうすればいいのかわかりませんでした
色々試していたらできたのでその手順をまとめておきます
もっといいスマートな方法があったら教えてください

環境

UE4.23.1
VisualStudioCommunity2017
Windows10

事前準備するもの

LevelSequenceを用意する
呼び出したい自作のBP公開されている関数を持つC++クラスを継承したBPクラス
今回用意したクラスはこちら

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

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"

UCLASS()
class IMGUI_PRJ_API AMyActor : public AActor
{
    GENERATED_BODY()
    
public: 
    // Sets default values for this actor's properties
    AMyActor();
public:
    UFUNCTION(BlueprintCallable, Category = "Test Actor")
    void TestFunction();

    UFUNCTION(BlueprintCallable, Category = "Test Actor")
    void BoolFunction(bool hoge);

};

#include "MyActor.h"
void AMyActor::TestFunction()
{
    GLog->Log("TestFunction");
}

void AMyActor::BoolFunction(bool hoge)
{
    GLog->Log("BoolFunction");
}

手順

1. LevelSequenceを開く

image.png ※レベルに配置されてないのでDetailウィンドウにはなにも表示されません

2. 「Track > Actor to Sequence」からBP_MyActorを追加する

sequence1.png

3. BP_MyActorの下にEventトラックを追加する

sequence2.png

4. 追加したEventトラックを右クリックしてプロパティからBP_MyActorをEvent Receiversに登録する

sequence3.png

5. キーを作成し、キーを右クリックからCreateQuickBindingからBP公開されているイベントを呼ぶ

sequence4.png

5-2. BP_MyActorの下につけてないEventトラックではEvent Receiversに登録してもCreateQuickBindingが出てこないので注意

sequence5.png

6. 追加すると確認LevelSequenceDirectorが開き、BP_MyActorのインスタンスを引数で持ってこれているのが確認できる(完)

image.png

6-2. LevelSequenceから呼ぶイベントにtarget以外の引数を増やしたらイベントそのものが無効になるので注意

image.png sequence6.png

さいごに

ざっくりまとめました
これややこしくない?これ以外にスマートな方法がある気がしてならないんですが、誰か教えてくれませんか?
気軽にコメントよろです