如何注册Cue的回调委托

关于节拍同步委托

您可以与添加到Cue的节拍同步信息的节拍速度匹配来调用任意已注册函数。
在委托中可以注册多个函数。

关于序列回调委托

您可以在添加到Cue中的序列回调标记的时机来调用任何已注册的函数。
在委托中可以注册多个函数。

在Cue中添加节拍同步信息

在Atom Craft准备添加了节拍同步信息的Cue。

criware_atom_ue4_beatsync1_L.jpg
关于节拍同步的详细信息,请参照 https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_beatsync.html

在Cue中添加序列回调标记

在AtomCraft准备添加了序列回调标记的Cue。

criware_atom_ue4_beatsync2_S.jpg
关于序列的详细信息,请参照 https://game.criware.jp/manual/adx2_tool/latest/criatom_tools_atomcraft_sequence_marker.html

如何在蓝图中注册

您可以从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的指针和每个回调信息的结构体作为要注册函数的参数。
从实际的调用时间开始会有延迟,以实现线程安全。
请注意,由于委托是在主线程中执行,因此操作帧速率会受到影响。