概要
UnrealEngine5のナイアガラのユーザーパラメータについて、パラメータを設定することはあっても取得したことがなかったので調べてみたメモ書きです。
更新履歴
| 日付 | 内容 |
|---|---|
| 2025/09/29 | 初版 |
参考
以下を参考にさせて頂きました、ありがとうございます。
UE公式:Niagaraの概要
【Niagara】BPで動的にNiagaraを制御する
過去関連記事
環境
Windows11
Visual Studio 2022
UnrealEngine 5.6
関連ソース
"Engine\Plugins\FX\Niagara\Source\Niagara\Public\NiagaraComponent.h"
ナイアガラユーザーパラメータについて
Niagaraシステムアセットで設定できるパラメータです。
int や float や Vector といったプリミティブな型はすべて設定可能なようです。
ユーザーパラメータを設定する
ユーザーパラメータへの設定はコンポーネントに対して SetNiagaraVariableや SetNiagaraVariableByString系のノードで行うことができます。

C++の場合も同様で、コンポーネントに SetVariable***といったメソッドがあります。
UNiagaraComponent* _Effect = UNiagaraFunctionLibrary::SpawnSystemAtLocation(
GetWorld(),
/*ナイアガラシステムアセット*/,
GetActorLocation(),
FRotator::ZeroRotator,
FVector(1.0f),
true, // bAutoDestroy
true, // bAutoActivate
ENCPoolMethod::AutoRelease,
true // bPreCullCheck
);
// ユーザーパラメータを設定する
if(_Effect){
_Effect->SetVariableInt(FName("intParam"), 100);
_Eff->SetVariableFloat(FName("floatParam"), 200.0f);
_Eff->SetVariableVec3(FName("VectorParam"), FVector(10.f, 20.f, 30.f));
}
ユーザーパラメータを取得する
BPでユーザーパラメータを読み込むノードは提供されていないようです。(BPでユーザーパラメータを取得できるノードを提供するプラグインがFabで販売されているようです)
C++で読み込む場合は型やパラメータ名がわかっている場合は以下のような感じで取得できます、以下コード例。
// スポーン済みナイアガラコンポーネント
UNiagaraComponent* _Effect = ...;
// float型の[floatParam]というユーザーパラメータを取得する
if(_Effect)
{
const FNiagaraParameterStore& _Params = _Effect->GetOverrideParameters();
const FNiagaraVariable _Var(FNiagaraTypeDefinition::GetFloatDef(), TEXT("floatParam"));
// インデックスチェック
if (_Params.IndexOf(_Var) != INDEX_NONE)
{
// float型で読み込み
float _Value = _Params.GetParameterValue<float>(_Var);
UE_LOG(LogTemp, Log, TEXT("floatParam = %f"), _Value);
}
}
ユーザーパラメータ一覧から取得することもできます。
FNiagaraTypeDefinitionで型を調べてから GetParameterValue<>()で値を取得します、以下コード例。
// スポーン済みナイアガラコンポーネント
UNiagaraComponent* _Effect = ...;
if(_Effect)
{
const FNiagaraParameterStore& _Params = _Effect->GetOverrideParameters();
// パラメータ読み取り
TArrayView<const FNiagaraVariableWithOffset> _Vars = _Params.ReadParameterVariables();
// パラメータ一覧をチェック
for (const FNiagaraVariableWithOffset& _VarWithOffset : _Vars)
{
const FNiagaraVariable& _Var = _VarWithOffset;
const FNiagaraTypeDefinition& _Type = _Var.GetType();
// 型チェックして値を取得
if (_Type == FNiagaraTypeDefinition::GetFloatDef())
{
float _Value = _Params.GetParameterValue<float>(_Var);
UE_LOG(LogTemp, Log, TEXT("%s = %f"), *_Var.GetName().ToString(), _Value);
}
else if (_Type == FNiagaraTypeDefinition::GetVec3Def())
{
FVector3f _Value = _Params.GetParameterValue<FVector3f>(_Var);
UE_LOG(LogTemp, Log, TEXT("%s = %s"), *_Var.GetName().ToString(), *FVector(_Value).ToString());
}
...以下省略...
}
}
ユーザーパラメータ一覧の取得は正しい変数名かどうかのチェックに使えるのではないでしょうか。
まとめ
ナイアガラのVec3は要素が float型になっており、UE5ではFVector3f型で取得する必要があったため、最初はうまく取得できず悩みました。UE5のFVector型の要素は doubleでした…
Quat型なども*f型で読み込む必要があるので注意が必要です。