0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

UE5 Niagaraユーザーパラメータについてのメモ

0
Last updated at Posted at 2025-09-29

概要

UnrealEngine5のナイアガラのユーザーパラメータについて、パラメータを設定することはあっても取得したことがなかったので調べてみたメモ書きです。

更新履歴

日付 内容
2025/09/29 初版

参考

以下を参考にさせて頂きました、ありがとうございます。
UE公式:Niagaraの概要
【Niagara】BPで動的にNiagaraを制御する

過去関連記事

UE5 ナイアガラパラメータコレクションに関するメモ

環境

Windows11
Visual Studio 2022
UnrealEngine 5.6

関連ソース

"Engine\Plugins\FX\Niagara\Source\Niagara\Public\NiagaraComponent.h"

ナイアガラユーザーパラメータについて

Niagaraシステムアセットで設定できるパラメータです。
intfloatVector といったプリミティブな型はすべて設定可能なようです。

ユーザーパラメータを設定する

ユーザーパラメータへの設定はコンポーネントに対して SetNiagaraVariableSetNiagaraVariableByString系のノードで行うことができます。
SetParamBP.png

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++で読み込む場合は型やパラメータ名がわかっている場合は以下のような感じで取得できます、以下コード例。

ユーザーパラメータ取得例1
// スポーン済みナイアガラコンポーネント
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<>()で値を取得します、以下コード例。

ユーザーパラメータ取得例2
// スポーン済みナイアガラコンポーネント
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型で読み込む必要があるので注意が必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?