概要
UnrealEngine5 の Niagara のパラメータ関連のメモ書きです。
更新履歴
日付 | 内容 |
---|---|
2024/09/27 | 初版 |
参考
以下の記事を参考にいたしました、ありがとうございます。
UE公式:UNiagaraComponent
UE公式:UNiagaraParameterCollection
[UE5.3.2][Niagara]Niagara Parameter Collection の使い方
UE5 Niagara C++ドキュメント(非公式)
ナイアガラコンポーネント(UNiagaraComponent)
ナイアガラを扱うためのコンポーネントです。スカラーパラメータ等を入れる際に使ったりします。
// ナイアガラエフェクト生成
UNiagaraComponent* _NC = UNiagaraFunctionLibrary::SpawnSystemAttached(...省略...);
// パラメータを入れる
_NC->SetVariableFloat(TEXT("Scale"), 0.5f);
_NC->SetVariableVec3(TEXT("Position"), FVector(0.0f, 0.0f, 100.0f));
ナイアガラパラメータコレクション(UNiagaraParameterCollection)
ナイアガラエフェクトシステムで使用される共通のパラメータセットで、複数のエミッタなどでパラメータを共有しまとめて更新することができます。
[FX]->[高度]->[Niagaraパラメータコレクション]でアセットを作成します。
使い方
エミッタのパラメータを差し替える
ナイアガラシステムの[パラメータ]ウィンドウの[Niagaraパラメータコレクション]の[+]から作成したナイアガラパラメータコレクションアセットを登録します。
NPCに登録されているパラメータ一覧が表示されるのでそれをエミッター詳細ウィンドウの適用したい変数へドラッグ&ドロップすると適用されます。
型が違う場合は警告が出ます。
パラメータを取得する
C++ にてナイアガラパラメータコレクションからパラメータを取得できます。
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Niagara")
TObjectPtr<UNiagaraParameterCollection> NPC;
// ナイアガラパラメータコレクションインスタンスを取得する
UNiagaraParameterCollectionInstance* _NPCI = NPC->GetDefaultInstance();
if(_NPCI){
// NPCIからパラメータ取り出し
const float _Scale = _NPCI->GetFloatParameter(FString(TEXT("Scale")));
const FVector _Position = _NPCI->GetVectorParameter(FString(TEXT("Position")));
}
パラメータ名を取り出す
ナイアガラパラメータコレクションに設定されたパラメータ名を取り出すこともできます。以下コード例。
auto _NPCI = NPC->GetDefaultInstance();
// ネームスペース
const FString _Namespace = _NPCI->GetParent()->GetFullNamespace();
// パラメータ名を取り出す
TArray<FNiagaraVariable> _OutParams;
_NPCI->GetParameters(_OutParams);
for (const auto& _Prm : _OutParams) {
FString _Full = *_Prm.GetName().ToString();
FString _Short = _Full.Replace(*_Namespace, TEXT(""), ESearchCase::IgnoreCase);
UE_LOG(LogTemp, Log, TEXT("Full:%s / Short:%s"), *_Full, *_Short);
}
これを利用してデータアセット的な使い方も可能です。
ナイアガラパラメータインスタンス(UNiagaraParameterCollectionInstance)
ナイアガラパラメータコレクション(NPC)から作成できるインスタンスでパラメータのオーバーライドができます。
基本はNPCからの値を使用するが、一部だけ差し替えたい場合などに使えます。
まとめ
複数のナイアガラシステムからのパラメータ共有に便利だと思います。実行中にNPCを変更した場合はどうなるのかよくわかりません。