UE4 NiagaraModuleの依存関係について
ご挨拶
こんにちは、Shiotaniです。
毎年恒例、UE4 AdventCalendarが始まりましたね!
qiita.com
さて、今回は、Niagara Moduleにおける依存関係について書きたいと思います。
概要
Niagaraにて、Moduleを追加したタイミングなどにおいて、以下の警告が出たことはありませんか?
一見、胃がキリキリするような警告文に見えるかもしれません。
ですが、Niagaraにおいて、こちらの警告文は非常に強い味方となってくれます。
以下に少し説明が入ります。
実装のみをご覧になりたい方は、こちらをクリックしてください。
この警告はなんなのか?
Module間の依存関係が満たされていない場合に出される警告です。
細かく見ていきましょう。
以下警告文の内容
- このModuleは依存関係が満たされていません。
- 以下のModuleとの依存関係が満たされていません。:"SolveForcesAndVelocity"
- Fix issueボタンにより、この"DragForce"を"SolveForcesAndVelocity"に対して正しい位置に再配置します。
- Dismiss issueボタンにより、Fix issueボタンによる修正を行わず、手作業で修正を行う。(何を行っているのかわかっています。)
上2項目は、画像のDragForceを使用するために必要となるSolveForcesAndVelocityが使用されていない。
または、スタックもしくは、ノードの位置関係がおかしい事を指しています。
下2項目は、各々、事前に設定された依存関係をボタン1つで修正するか、警告を無視するかといったものとなっています。
今回のDragForceにおける正しい依存関係とは何か?
スタックとして、DragForceがSolveForcesAndVelocityよりも上に置かれている状況を指します。
「依存関係の設定」字面だけですと、小難しいイメージを抱きそうですが、そんなことはありません。
むしろ、とても簡単です!
次の実践編にて、実際の設定方法などを見ていきます。
前提
- Unreal Engine 4.21.0を使用しています。
- Niagaraは、アーリーアクセスです。
今後実装方法などに変更がある可能性があります。
実践
準備
まずは、以下を用意します。
種類 | 名称 |
---|---|
Emitter | NE_Test |
Module | NM_Parent |
Module | NM_Child |
今回は依存関係のテストのみになりますので、空のEmitterで問題ありません。
実装概要
NM_ParentがEmitter内に存在しない。または、位置関係がおかしい場合、NM_Childに警告文が出るようにしたいと思います。
Module内のDetailsを見てみる
dependencies(依存関係)の文字が2つあります。
この2つの項目を設定する事により、依存関係を作ることができます。
2つの項目を見てみる
Provided Dependencies
IDにより、スタック上における他のModuleに対して提供する依存関係を設定できます。Required Dependencies
IDにより、スタック上における他のModuleから提供されたIDを元に警告文を出すことができます。
また、Typeにより、Fix issueボタンによる修正時に依存関係にあるModuleより上に再配置するか、下に再配置するかを設定できます。
どちらも共通して配列として追加できるので、複数のIDをもたせることもできます。
NM_Parentの設定
Provided dependenciesを追加し、IDにはFamilyと設定します。
NM_Childの設定
Required dependenciesを追加し、IDにはNM_Parentと共通のFamilyを設定します。
Typeは、Pre Dependencyにしておきます。
NE_Testでチェック
動画のようにNM_Parentを追加せずにNM_Childを追加すると警告文がでるようになりました。
そして、Fix issueボタンにより、NM_Parentの下部にNM_Childが再配置されました。
おまけ
NM_ChildのRequired dependenciesにあるTypeを変えてみる。
動画のようにRequired dependenciesにあるTypeを
Pre Dependencyに設定すると、依存しているModuleの下部に再配置され
Post Dependencyに設定すると、依存しているModuleの上部に再配置されます。
まとめ
複数人でNiagaraを使用する場合は、アセットの命名規則と一緒に依存関係も用意しておくと良さそうですね。
今回の依存関係を活用すれば、Moduleの差し忘れやModuleの配置ミスなど細かなヒューマンエラーを回避できるようになるはず!!