キューのコールバックデリゲートの登録方法

ビート同期デリゲートについて

キューに追加されているビート同期情報のテンポに合わせて、登録されている任意の関数を呼び出すことができます。
複数の関数をデリゲートに登録することが可能です。

シーケンスコールバックデリゲートについて

キューに追加されているシーケンスコールバックマーカーのタイミングに合わせて、登録されている任意の関数を呼び出すことができます。
複数の関数をデリゲートに登録することが可能です。

キューにビート同期情報を追加する

AtomCraft上でビート同期情報を追加したキューを準備します。

criware_atom_ue4_beatsync1_L.jpg
ビート同期についての詳しい情報はこちら

キューにシーケンスコールバックマーカーを追加する

AtomCraft上でシーケンスコールバックマーカーを追加したキューを準備します。

criware_atom_ue4_beatsync2_S.jpg
シーケンスについての詳しい情報はこちら

ブループリントでの登録する方法

"AtomComponent" から各デリゲートを呼び出すことができます。
各デリゲートに任意のカスタムイベントをバインドすることでコールバック時の処理を呼び出すことができます。

criware_atom_ue4_callback3_L.jpg

C++コードでの登録する方法

MyActor.h

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
// Please include
#include "AtomComponent.h"
#include "MyActor.generated.h"
UCLASS()
class SO_PROJECTED_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values
AMyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called before destroying an object
virtual void BeginDestroy() override;
private:
// Called at beat sync timing
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnBeatSyncCallback(UAtomComponent* Atom, const FAtomBeatSyncInfo& Info);
// Called at sequence callback timing
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnSequenceCallback(UAtomComponent* Atom, const FAtomSequenceInfo& Info);
private:
// UAtomComponent reference
UAtomComponent* AtomComponent{ nullptr };
};

MyActor.cpp

#include "MyActor.h"
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = false;
PrimaryActorTick.bStartWithTickEnabled = false;
// Create UAtomComponent reference
AtomComponent = NewObject<UAtomComponent>();
AtomComponent->AddToRoot();
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
// Set beat sync call back function
AtomComponent->OnAtomBeatSyncCallback(this, &AMyActor::OnBeatSyncCallback);
// Set sequence call back function
AtomComponent->OnAtomSequenceCallback(this, &AMyActor::OnSequenceCallback);
}
// Called before destroying an object
void MyActor::BeginDestroy()
{
if(IsValid(AtomComponent) == true){
AtomComponent->RemoveFromRoot();
AtomComponent = nullptr;
}
}
// Called at beat sync timing
void AMyActor::OnBeatSyncCallback(UAtomComponent* Atom, const FAtomBeatSyncInfo& Info)
{
UE_LOG(LogTemp, Log, TEXT("Called AtomBeatSync Callback!"));
}
// Called at sequence timing
void AMyActor::OnSequenceCallback(UAtomComponent* Atom, const FAtomSequenceInfo& Info)
{
UE_LOG(LogTemp, Log, TEXT("Called AtomSequence Callback!"));
}
注意
登録する関数にはUAtomComponentのポインタと各コールバック情報の構造体を引数に持ってきてください。
スレッドセーフを実現するために実際の呼び出しタイミングから遅延が発生することを確認しています。
メインスレッドでデリゲートの実行を行っているため、動作フレームレートの影響を受けるので注意してください。