ビート同期デリゲートについて
キューに追加されているビート同期情報のテンポに合わせて、登録されている任意の関数を呼び出すことができます。
複数の関数をデリゲートに登録することが可能です。
シーケンスコールバックデリゲートについて
キューに追加されているシーケンスコールバックマーカーのタイミングに合わせて、登録されている任意の関数を呼び出すことができます。
複数の関数をデリゲートに登録することが可能です。
キューにビート同期情報を追加する
AtomCraft上でビート同期情報を追加したキューを準備します。
- ビート同期についての詳しい情報はこちら
キューにシーケンスコールバックマーカーを追加する
AtomCraft上でシーケンスコールバックマーカーを追加したキューを準備します。
- シーケンスについての詳しい情報はこちら
ブループリントでの登録する方法
"AtomComponent" から各デリゲートを呼び出すことができます。
各デリゲートに任意のカスタムイベントをバインドすることでコールバック時の処理を呼び出すことができます。
C++コードでの登録する方法
MyActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "AtomComponent.h"
#include "MyActor.generated.h"
UCLASS()
class SO_PROJECTED_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
protected:
virtual void BeginPlay() override;
virtual void BeginDestroy() override;
private:
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnBeatSyncCallback(UAtomComponent* Atom, const FAtomBeatSyncInfo& Info);
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnSequenceCallback(UAtomComponent* Atom, const FAtomSequenceInfo& Info);
private:
UAtomComponent* AtomComponent{ nullptr };
};
MyActor.cpp
#include "MyActor.h"
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = false;
PrimaryActorTick.bStartWithTickEnabled = false;
AtomComponent = NewObject<UAtomComponent>();
AtomComponent->AddToRoot();
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
AtomComponent->OnAtomBeatSyncCallback(this, &AMyActor::OnBeatSyncCallback);
AtomComponent->OnAtomSequenceCallback(this, &AMyActor::OnSequenceCallback);
}
void MyActor::BeginDestroy()
{
if(IsValid(AtomComponent) == true){
AtomComponent->RemoveFromRoot();
AtomComponent = nullptr;
}
}
void AMyActor::OnBeatSyncCallback(UAtomComponent* Atom, const FAtomBeatSyncInfo& Info)
{
UE_LOG(LogTemp, Log, TEXT("Called AtomBeatSync Callback!"));
}
void AMyActor::OnSequenceCallback(UAtomComponent* Atom, const FAtomSequenceInfo& Info)
{
UE_LOG(LogTemp, Log, TEXT("Called AtomSequence Callback!"));
}
- 注意
- 登録する関数にはUAtomComponentのポインタと各コールバック情報の構造体を引数に持ってきてください。
スレッドセーフを実現するために実際の呼び出しタイミングから遅延が発生することを確認しています。
メインスレッドでデリゲートの実行を行っているため、動作フレームレートの影響を受けるので注意してください。
-