fc2ブログ

凛(kagring)のUE5/UE4とゲーム制作と雑記ブログ

2016 年から UE4 / 2021年から UE5 を触り始めました。勉強したもののメモ用ブログです。ゲーム制作に関するメモや雑記とか色々あります。C++ での Qt、Unity もほんの少しあります。

| PAGE-SELECT | NEXT

≫ EDIT

UE5/UE4 C++でガベージコレクション(Garbage Collection)を強制的に実行する(GEngine::ForceGarbageCollection)

C++でガベージコレクション(Garbage Collection)を強制的に実行する方法です。

こちらを参考にさせていただきました。

・【UE5】強制的にガベージコレクションを動作させる
https://shuntaendo.hatenablog.com/entry/2022/03/22/090220

「GEngine::ForceGarbageCollection」関数を使うことで
ガベージコレクション(Garbage Collection)を強制的に実行
することができるようです。

// ガベージコレクションを強制的に実行
GEngine->ForceGarbageCollection(true);


ステージ制のゲームや画面の切り替わりなどで結構使う機会はあるのかなと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++でアセットファイルを同期読み込み(ロード)する(LoadObject)

C++でアセットファイルを同期読み込み(ロード)する方法です。

こちらを参考にさせていただきました。

・【UE4】同期的なアセットのロード方法とデメリット
https://qiita.com/4_mio_11/items/00de94dbb6b6ed59176f

・(UE4 4.20) UE4 synchronous loading and asynchronous loading UObject ----------LoadObject, LoadClass, FStreamableManager
https://blog.karatos.in/a?ID=00850-b316c715-b75c-4f8b-b2b4-1f35208560dd

「LoadObject」関数を使うことで直接アセットファイルを読み込む(ロードする)ことができます。
こんな感じですね。

// データテーブル(UDataTable)アセットの読み込み
// アセットファイルへのパス
FString aDataTablePath("/Game/DataTable/DT_NewDataTable.DT_NewDataTable");

// LoadObject を使った同期読み込み(ロード)
TObejctPtr< UDataTable> aDataTable;
aDataTable = LoadObject< UDataTable>(nullptr, (*aDataTablePath), nullptr, LOAD_None, nullptr);


「LoadObject」関数はあくまで同期読み込みの処理となります。
なので、実際にゲームで使う場合は別の非同期読み込みで対応するようにしたいですね。

注意点は参考サイトさんに書かれています。

前提として知っておきたいデメリット
まず、同期的なロードを扱うと、ロード処理中はメインスレッドを占有してしまうため、
プレイヤーから見るとUIも処理も止まってゲーム画面がフリーズしているように見えたりかくついて見えます。

そのため、ミニマムなアセットロードを行う処理であれば問題ありませんが、
重いアセットのロードを一気に行うとユーザー体験を損ねる可能性があるので注意が必要です。
この場合は非同期なロードを行う必要があります。


「LoadObject」はあくまでデバッグ用とかに使うのがいいのかなと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++で複数のアセットファイルを非同期読み込み(ロード)する(RequestAsyncLoad、FStreamableManager、FStreamableHandle、FSoftObjectPath)

C++で複数のアセットファイルを非同期読み込み(ロード)する方法です。

こちらを参考にさせていただきました。

・【UE4】同期的なアセットのロード方法とデメリット
https://qiita.com/4_mio_11/items/00de94dbb6b6ed59176f

・(UE4 4.20) UE4 synchronous loading and asynchronous loading UObject ----------LoadObject, LoadClass, FStreamableManager
https://blog.karatos.in/a?ID=00850-b316c715-b75c-4f8b-b2b4-1f35208560dd

・Assets Streaming
https://jdelezenne.github.io/Codex/UE4/Assets%20Streaming.html

・【UE4】StreamableManagerについて
https://qiita.com/pino_tabetai/items/abd66146d9340d10ebb6

複数ファイルの非同期読み込みは「FStreamableManager」を使います。
「FStreamableManager」の「RequestAsyncLoad」関数に
複数の「FSoftObjectPath」でアセットを渡すことで非同期読み込みを実行
できます。

まずは複数アセットの「FSoftObjectPath」変数とロードハンドルの「FStreamableHandle」変数、
あとは読み込み(ロード)完了時のコールバック関数を持つクラスを作ってみました。

// 読み込み用の変数とコールバック関数を保持するクラス(割と適当です)
UCLASS()
class ULoadClass : public UObject
{

GENERATED_BODY()
public:
// FStreamableManager。本来はシングルトンなどでゲーム中に一つだけ存在するようにします。
FStreamableManager StreamableManager ;
// ロードハンドル
TSharedPtr< FStreamableHandle> StreamableHandle;
// ソフトオブジェクト(複数を同時に読み込みたいので TArray になっています)
TArray< FSoftObjectPath> LoadSoftObjectPathes;
public:
// 読み込み開始関数
void BeginLoad();
// 読み込み(ロード)完了コールバック関数
void OnLoadCompleted();
};


上記クラスの変数と関数を使って非同期読み込み処理を書いてみます。

// 非同期読み込み開始関数
void ULoadClass ::BeginLoad()
{

// FStreamableManager を取得。本来はどこかに一つだけ保持しているものを取得する。
FStreamableManager& aStreamableManager = StreamableManager;

// 読み込みたいアセットのパスを登録
LoadSoftObjectPathes.Add(FSoftObjectPath("/Game/DataTable/DT_NewDataTable.DT_NewDataTable"));
LoadSoftObjectPathes.Add(FSoftObjectPath("/Game/DataTable/DT_OldDataTable.DT_OldDataTable"));


// 非同期読み込み開始とロードハンドルの取得。読み込み完了時のコールバック関数も登録
StreamableHandle = aStreamableManager.RequestAsyncLoad(
LoadSoftObjectPathes, FStreamableDelegate::CreateUObject(this, &ULoadClass ::OnLoadCompleted)
);
}

これで非同期読み込みの実行自体は完成です。

あとは読み込み完了時にアセットデータの取得などをコールバック関数を使って行います。

// 読み込み完了コールバック関数
void ULoadClass::OnLoadCompleted()
{

// 非同期読み込みを実行した UDataTable アセットを取得する。
// 一つ目のアセット
TSoftObjectPtr< UDataTable> aNewDataTablePtr;
aNewDataTablePtr = TSoftObjectPtr< UDataTable>(LoadSoftObjectPathes[0]).Get();
TObejctPtr< UDataTable> aNewDataTable = aNewDataTablePtr .Get();

// 二つ目のアセット
TSoftObjectPtr< UDataTable> aOldDataTablePtr;
aOldDataTablePtr = TSoftObjectPtr< UDataTable>(LoadSoftObjectPathes[1]).Get();
TObejctPtr< UDataTable> aOldDataTable = aOldDataTablePtr .Get();

// 非同期読み込み終了
StreamableHandle .Reset();
}


と、結構長くなってしまいましたが、この方法で複数アセットの非同期読み込みをすることができました。
もしかしたらもっとわかりやすい方法などあるかもしれないので、ちょこちょこと調べようと思います。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 2022/08 の無料マーケットプレイスコンテンツと永続コンテンツ(Stylized Egypt | AleksandrIvanov)

2022/08 の無料マーケットプレイスコンテンツと永続コンテンツのメモです。

公式情報はこちら。
・2022年08月の無料マーケットプレイスコンテンツ
https://www.unrealengine.com/ja/blog/featured-free-marketplace-content-august-2022

無料コンテンツについては期日がすぎると無料でなくなるので公式情報や他のサイトさんを見たほうが良いかと思います。
こちらでは永続コンテンツについてのメモを残しておきます。

・Stylized Egypt | AleksandrIvanov
https://www.unrealengine.com/marketplace/ja/product/f7ec5277de6440dcaa6d6e25f9ad1de3

この小さなセットはスタイライズされたエジプト環境を作り上げるのにピッタリです。96 個の建築プロップと、植物、石などがあります。あなたの冒険にちょっとした古代神話要素を入れてみましょう。

This package contains a small set for creating a stylized Egypt environment.
(このパッケージには、様式化されたエジプト環境を作成するための小さなセットが含まれています。)

と書いてあるので、エジプトを再現するようなアセットが入っているようです。

Features:
This package contains a small set for creating a stylized Egypt environment.
Meshes:
・96 building props (6798 - 20 triangles) LODs: Yes (auto)
・10 plants (1648 - 6 triangles) LODs: Yes (auto)
・11 props (3752 - 144 triangles) LODs: Yes (auto)
・7 stones (686 - 124 triangles) LODs: Yes (auto)
Number of Meshes: 124
Collision: Yes
Materials: Landscape Material, Mesh Materials.
Texture Resolutions: 1024, 2048, 4096
Texture Format: TGA, PNG
Do Materials derive from a Master Material with instances as variation: Yes
Number of Textures: 84
Supported Development Platforms: Windows, PS4, Xbox One
Supported Target Build Platforms: 4.20 +

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++でデストラクタ(Destructor)的なタイミングをイベントで処理する(BeginDestroy)

C++でデストラクタ(Destructor)的なタイミングをイベントで処理する方法です。

こちらを参考にさせていただきました。

・UE4 Unreal C++でデストラクタ
https://papersloth.hatenablog.com/entry/2018/04/13/223631

UObjectを継承したクラスではBeginDestroyをOverrideすると良さそうです。
これはオブジェクトがGC用にマークされた状態でも、まだ削除されていないときに呼び出されるものです。
ゲームプレイ機能は後述のEndPlayで解放し、BeginDestroyでオブジェクトが使用していた全リソースを解放します。

とのことです。

ただ、この「BeginDestroy」はBPでは公開されていないので、
基本C++で継承したクラスで実装する以外には方法がなさそうです(見落としていたらごめんなさい)

というわけでこんな感じでヘッダに追加します。

// 継承したクラス
UCLASS()
class ANewActor : public AActor
{

GENERATED_BODY()
public:
// この関数を追加
virtual void BeginDestroy() override;
};


実際の処理関数はこんな感じになります。

// 破棄開始
void ANewActor ::BeginDestroy()
{

Super::BeginDestroy();
}


あまり使う機会はないかもしれませんが、マネージャー系などだと使うのかなと思いました。

終了処理を明示的に記述したい場合はEndPlay
デストラクタの代替機能が欲しい場合はBeginDestroy

UObjectを継承したクラスでは基本的にデストラクタを記述する必要はありません。

ここらへん注意して使っていきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++で条件元の変数を非表示にした状態での条件付き変数をプロパティ指定子(Property Specifiers)を使って指定する(UPROPERTY(meta = (EditCondition=変数名)))

C++で条件元の変数を非表示にした状態での条件付き変数をプロパティ指定子(Property Specifiers)を使って指定する方法です。

こちらを参考にさせていただきました。

・UE4 よく使うUPROPERTYメモ
https://qiita.com/bigengelt/items/b17545fffe7b8d69e5e8

条件付き変数を作成するには
「UPROPERTY」で「meta=(EditCondition = 変数名)」と指定することで実装することができます。
「条件となる変数の作成」と「条件によって変更できるようになる変素」の二つの変数が必要になります。

この変数の定義で「EditAnywhere」や「EditDefaultsOnly」を何も指定しない場合は、
条件付き変数の条件となる変数を非表示状態で、条件付き変数の方にくっつけた状態で制御する
ことができます。

と、文章で書いててもよくわからないので実際にやってみます。
「EditAnywhere」や「EditDefaultsOnly」を指定した場合の条件付き変数はこんな感じになります。

// 条件付き変数(条件となる変数)
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bEditConditionValue;
// 条件付き変数(条件によって編集可能となる変数)
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = bEditConditionValue))
int32 EditConditionValueInt;


上記の指定を行うとこんな感じで条件が真となる時のみ変数の変更が可能になります。
EditCondition000.jpg
条件元となる変数「bEditConditionValue」が表示され、
チェックを付けることで「EditConditionValueInt」の変数の変更が可能になります。

この場合、条件元の変数「bEditConditionValue」と
条件付き変数「EditConditionValueInt」の関連はぱっと見ためだとよくわからないと思います。

これをわかりやすくするには「EditAnywhere」や「EditDefaultsOnly」の記述をなくします。
こんな感じですね。

// 条件付き変数1
UPROPERTY(BlueprintReadOnly)
bool bEditConditionValueTwo;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = bEditConditionValueTwo))
int32 EditConditionValueInt;
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = bEditConditionValueTwo))
float EditConditionValueFloat;
// 条件付き変数2
UPROPERTY(BlueprintReadOnly)
bool bEditConditionValueOne;

UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = bEditConditionValueOne))
FVector EditConditionVector;


上記のように条件付き変数を定義するとエディタではこんな感じに表示されます。
EditConditionCheck000.jpg
条件元となる変数「bEditConditionValueTwo」と「bEditConditionValueOne」はエディタに表示されません。
その代わりその変数を条件とする変数の横にチェックボックスが表示
されます。

このチェックボックスを変更することで
条件元として定義した変数「bEditConditionValueTwo」と「bEditConditionValueOne」が切り替わります。
EditConditionCheck001.jpg
こんな感じで対応した条件付き変数への変更が可能になります。

二つの変数に対して条件元が設定してあった場合は片方を変更すると両方変更が可能になります。
EditConditionCheck002.jpg

変数の関連だったりはこちらの方がわかりやすいと思うので使っていきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++で条件付き変数をプロパティ指定子(Property Specifiers)を使って指定する(UPROPERTY(meta = (EditCondition=変数名)))

C++で条件付き変数をプロパティ指定子(Property Specifiers)を使って指定する方法です。

こちらを参考にさせていただきました。

・UE4 よく使うUPROPERTYメモ
https://qiita.com/bigengelt/items/b17545fffe7b8d69e5e8

条件付き変数を作成するには
「UPROPERTY」で「meta=(EditCondition = 変数名)」と指定することで実装することができます。
「条件となる変数の作成」と「条件によって変更できるようになる変素」の二つの変数が必要になります。

こんな感じの記述になります。

// 条件付き変数(条件となる変数)
UPROPERTY(EditAnywhere, BlueprintReadWrite)
bool bEditConditionValue;
// 条件付き変数(条件によって編集可能となる変数)
UPROPERTY(EditAnywhere, BlueprintReadWrite, meta = (EditCondition = bEditConditionValue))
int32 EditConditionValueInt;


上記の指定を行うとこんな感じで条件が真となる時のみ変数の変更が可能になります。
EditCondition000.jpg
条件となる変数「bEditConditionValue」が偽となるため、
条件付き変数「EditConditionValueInt」は編集することができません。


EditCondition002.jpg
条件となる変数「bEditConditionValue」が真になったため、
条件付き変数「EditConditionValueInt」を編集することが可能になりました。


あまりこれの使い道はぱっとは思いつかないのですが、
エディタで編集する際に、フラグと値がもしも連動している場合は
この機能を使って使うか使わないかの判断ができそうな気がするので、作業としてわかりやすくなるのかもしれません。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 C++で「Enum(UENUM)」をビットフラグとして扱う(ENUM_CLASS_FLAGS、EnumHasAnyFlags、EnumHasAllFlags)

C++で「Enum(UENUM)」をビットフラグとして扱う方法です。

こちらを参考にさせていただきました。

・UE4 列挙型Enumについてのメモ
https://qiita.com/unknown_ds/items/292cf17a0ffa37f6c4cb

「Enum」をビットフラグとして扱いたいので色々と試してみます。

まずはこんな感じに「UENUM」を定義します。

// 普通の Enum
UENUM(BlueprintType)
enum class EBitFlagEnum : uint8
{

None = 0x00,
One = 0x01,
Two = 0x02,
};

それぞれの値がビットフラグとして扱えるような値になっています。

この「Enum」を使ってやりたいことは以下のものになります。

// ビットを立てたりしてみる(※エラーになる)
EBitFlagEnum aBitFlagEnum = EBitFlagEnum ::None;
aBitFlagEnum |= EBitFlagEnum::One;;
aBitFlagEnum &= ~EBitFlagEnum::Two;


// ビットチェックをしてみる(※エラーになる)
bool aResult = ((aBitFlagEnum & EBitFlagEnum::One) != 0);

これはどの記述もエラーになります。

ただ、やりたいこととしては上記のことになりますので、上記ができるよう実装していきます。

まずは「UENUM」を定義した後に「ENUM_CLASS_FLAGS」を記述します。

// ビットフラグとして使える Enum
UENUM(BlueprintType)
enum class EBitFlagEnum : uint8
{

None = 0x00,
One = 0x01,
Two = 0x02,
};
ENUM_CLASS_FLAGS(EBitFlagEnum);

これで「Enum」がビットフラグとして使えるようになりました。

というわけで確認してみます。

// ビットを立てたりしてみる(※正常に動作する)
EBitFlagEnum aBitFlagEnum = EBitFlagEnum::None;
aBitFlagEnum |= EBitFlagEnum::One;;
aBitFlagEnum &= ~EBitFlagEnum::Two;


// ビットチェックをしてみる(※これはまだエラーになる)
bool aResult = ((aBitFlagEnum & EBitFlagEnum::One) != 0);

というわけでビットを立てたりするのは想定通りに動くようになりましたが
ビットフラグのチェックがまだエラーになるようです。

「ENUM_CLASS_FLAGS」を記述した「UENUM」のビットフラグをチェックする場合は
「EnumHasAnyFlags」関数か「EnumHasAllFlags」関数を使います。

// 変数を定義
EBitFlagEnum aBitFlagEnum = EBitFlagEnum ::None;
// ビットチェックをしてみる(OR)
bool aResultOR = EnumHasAnyFlags(aBitFlagEnum, EBitFlagEnum::One);
// ビットチェックをしてみる(AND)
bool aResultAND = EnumHasAllFlags(aBitFlagEnum, EBitFlagEnum::One);

こんな感じで確認することができます。
上記だと関数に一つだけ渡しているのでどちらを使っても結果は同じになります。

「EnumHasAnyFlags」は二つ以上引数があればどちらかが立っていれば真を返します。
「EnumHasAllFlags」は二つ以上引数があれば両方ともが立っていれば真を返します。

// 変数を定義
EBitFlagEnum aBitFlagEnum = EBitFlagEnum ::None;
// どちらかが立っていればOK(OR)
bool aResultOR = EnumHasAnyFlags(aBitFlagEnum, EBitFlagEnum::One | EBitFlagEnum::Two);
// 両方とも立っていればOK(AND)
bool aResultAND = EnumHasAllFlags(aBitFlagEnum, EBitFlagEnum::One | EBitFlagEnum::Two);

こんな感じになります。

「Enum」をビットフラグとして使いたいことは結構あると思うので覚えておきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5/UE4 2021/11 の無料マーケットプレイスコンテンツと永続コンテンツ(Polar Sci-Fi Facility | Julio Juarez)

2021/11 の無料マーケットプレイスコンテンツと永続コンテンツのメモです。

公式情報はこちら。
・2021年11月の無料マーケットプレイスコンテンツ
https://www.unrealengine.com/ja/blog/featured-free-marketplace-content-november-2021

無料コンテンツについては期日がすぎると無料でなくなるので公式情報や他のサイトさんを見たほうが良いかと思います。
こちらでは永続コンテンツについてのメモを残しておきます。

・Polar Sci-Fi Facility | Julio Juarez
https://www.unrealengine.com/marketplace/ja/product/polar-sci-fi-facility

荒れ果てた実験ラボ、それとも犯罪現場?モジュラー式の Sci-fi 施設を好きに使ってみましょう。
美しい山の横にあります。

Modular science fiction facility with a grand mountain range vista.
This package hosts a wide variety of particle effects (avalanche, snow, sparks, and more) , decals,
architecture meshes, props, and vista meshes. Instance materials allow you to customize surface properties
such as tint, roughness, emissive, and others to your liking.
(壮大な山脈の展望を持つモジュラー型SF施設。
このパッケージには、様々なパーティクル効果(雪崩、雪、火花など)、
デカール、建築物メッシュ、プロップ、ビスタメッシュが含まれています。建築メッシュ、プロップ、ビスタメッシュ。
インスタンスマテリアルは、色合い、粗さ、表面性状をカスタマイズすることができます。
色合い、粗さ、放射性、その他をお好みでカスタマイズできます。)

と書いてあるので、メッシュやパーティクルやテクスチャやマテリアルなど一式が入っているようです。

Number of meshes: 52
Triangle Counts: Architecture meshes average at 600 triangles, props range from a simple crate that is 28 triangles to the most complicated detail mesh at 6348 triangles. Vista meshes and high detail meshes have LODS.
Collision: Meshes have proper collision for exception of vista meshes, wires, broken glass, and very small rocks which have no collision.
Number of Materials: Total 110 (includes instances)
Number of Textures: 60 (breakdown below)
32x32: 1
512x512: 20
1024x1024: 11

2048x1024: 2
2048x2048: 15
4096x4096: 11
Number of Particle Actors: 27
Platforms Tested: Windows


| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

≫ EDIT

UE5 「Meta Sound」の「Meta Sound(Meta Sound ソース)」アセットをBPから再生する(Trigger、Execute Trigger Parameter)

「Meta Sound」の「Meta Sound(Meta Sound ソース)」アセットをBPから再生する方法です。

こちらを参考にさせていただきました。

・UE5 MetaSound 05 ~ブループリントでTriggerのPlayとStopを制御する~ #UE5 #MetaSounds
https://note.com/posi_ta/n/n5377e5d6cf5d

とりあえず「Meta Sound(Meta Sound ソース)」アセットでこんな感じのノードを組みました。
MetaSound再生017
「Wave Player」ノードを使って「Sound Wave」アセットを再生する。といったものになります。

この設定をした「Meta Sound(Meta Sound ソース)」アセットをBPから再生できるようにします。

参考サイトを見る限りだと、
・再生条件を外部から指定できるようにする。
・BPで再生条件を実行する。
といったものにするようです。

というわけでまずは、再生条件を外部から指定できるようにしてみます。
「Meta Sound(Meta Sound ソース)」アセットを開いて入力ノードを追加します。
MetaSoundをBPで再生000
ノード名は「OnPlayStart」という名前にしてみました。

次にこの「OnPlayerStart」入力ノードの詳細でタイプを「Trigger」に設定します。
MetaSoundをBPで再生008

上記作成した「OnPlayerStart」入力ノードを「Wave Player」ノードの「Play」に接続します。
MetaSoundをBPで再生002
これで外部から「OnPlayerStart」というとトリガーが実行された場合に、音声の再生が行われるようになりました。

次にこの設定を行った「Meta Sound(Meta Sound ソース)」アセットをレベルに配置します。
MetaSoundをBPで再生003
こんな感じでアウトライナーに表示されました。

このアセットに対してBPから「OnPlayerStart」トリガーを実行してみます。
トリガーを実行するには「Execute Trigger Parameter」ノードを使います。
MetaSoundをBPで再生004
こんな感じで「In Name」に実行したいトリガー名を入力します。

※参考サイトだと「Trigger」ノードを使っていたのですが、
バージョン「5.0.3」だとこの「Execute Trigger Parameter」ノードで問題ないようです。


というわけで「Meta Sound(Meta Sound ソース)」アセットで
「Execute Trigger Parameter」ノードを使って再生条件となるトリガーを渡してあげます。
MetaSoundをBPで再生006
こんな感じになりました。

上記を実行すると、無事音声が再生されると思います。
設定が必要とはいえ、結構簡単に外部から再生できるのは嬉しいですね。

参考サイトだと「Audio Component」から「Get Parameter Interface」から「Trigger」ノードを実行していたのですが
上記のように「Audio Component」から直接「Execute Trigger Parameter」ノードが実行できました。

※ちなみにですが「Meta Sound(Meta Sound ソース)」アセットから
直接「Execute Trigger Parameter」ノードにも接続できるのですが、再生自体はどうもうまくいかない
ようです。
MetaSoundをBPで再生005
これはダメのようです。

「Meta Sound」は方法がたくさんあるようなので色々と覚えておきたいですね。

| UE5 | 10:00 | comments:0 | trackbacks:0 | TOP↑

| PAGE-SELECT | NEXT