Atom Cue Sheetアセットの非同期ロード

Atom Cue Sheet Loaderコンポーネントについて

ブループリントAPIの「Load Atom Cue Sheet」は、Atom Cue Sheetアセットのロードが完了するまで、処理をブロックします。
処理をブロックすることなくAtom Cue Sheetアセットをロードするには、 Atom Cue Sheet Loaderコンポーネント を使用する必要があります。

Atom Cue Sheetアセットの非同期ロード方法

Atom Cue Sheet Loaderコンポーネントは、指定されたAtom Cue Sheetアセットを非同期にロードし、ロード完了をイベントで通知するコンポーネントです。
アクタにAtom Cue Sheet Loaderコンポーネントを追加することで、Atom Cue Sheetアセットのロード完了タイミングに合わせて、任意の処理を実行することが可能になります。
具体的な処理の手順は、以下のとおりです。
  1. アクタに対し、Atom Cue Sheet Loaderコンポーネントを追加する。
  2. Atom Cue Sheet Loaderコンポーネントのプロパティ「Sound」に、ロードするAtom Cue Sheetアセットを指定する。
  3. イベントグラフのBeginPlayイベントで、Atom Cue Sheet LoaderコンポーネントのOnLoadCompletedイベントをバインドする。
以上の設定により、アクタの生成と同時にAtom Cue Sheetのロードが開始され、ロード完了時にOnLoadCompletedイベントがトリガされます。
例えば、以下のような処理を組むことで、Atom Cue Sheetアセットのロード完了と同時にキューの再生を開始することが可能です。

ブループリント

criware_ue4_035_async_acb_load_j.png

C++

MyActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "AtomCueSheetLoaderComponent.h"
#include "MyActor.generated.h"
UCLASS()
class ASYNCLOADCPP_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
protected:
UPROPERTY(EditAnywhere)
UAtomCueSheetLoaderComponent * Loader;
// Called when the game starts or when spawned
virtual void BeginPlay() override;
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnLoadCompleted();
UFUNCTION(BlueprintCallable, Category = "MyActor")
void OnLoadFailed();
};
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;
Loader = CreateDefaultSubobject<UAtomCueSheetLoaderComponent>("CueSheetLoader");
if (IsValid(Loader)) {
Loader->SetupAttachment(RootComponent);
Loader->CueSheetReference = FSoftObjectPath(FString("/Game/CommonCueSheet.CommonCueSheet"));
}
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
if (IsValid(Loader)) {
if (Loader->GetStatus() == EAtomCueSheetLoaderComponentStatus::Stop) {
Loader->Load();
}
Loader->OnLoadCompleted.AddDynamic(this, &AMyActor::OnLoadCompleted);
Loader->OnLoadError.AddDynamic(this, &AMyActor::OnLoadFailed);
}
}
void AMyActor::OnLoadCompleted()
{
/* ロードが完了したときの処理をここに記述します。 */
UE_LOG(LogTemp, Display, TEXT("Loading is completed!"));
}
void AMyActor::OnLoadFailed()
{
/* ロードが失敗したときの処理をここに記述します。 */
UE_LOG(LogTemp, Display, TEXT("Loading is failed!"));
}
注意
ストリーム再生データを含むAtom Cue Sheetアセット(AWBファイルを併用するAtom Cue Sheetアセット)を非同期ロードする場合、 ロードするAtom Cue Sheetアセット分だけバインダ数とバインド数を確保する必要があります。
(CriWareプロジェクト設定の [Number of Binders] と [Maximum Number of Binds] の値を、同時にロードするAtom Cue Sheetアセットの数よりも大きな値に設定する必要があります。)

本機能を使用するには、CRIWARE Unreal Engineプラグイン Ver.1.25.00以降で作成されたアセットを使用する必要があります。
Ver.1.25.00よりも古いプラグインで作成されたアセットを使用している場合には、Atom Cue Sheetアセットを再インポート、保存して内容を更新する必要があります。
(古い形式のアセットを使用すると、ロードが同期処理になる恐れがあります。)