UE4 NiagaraModuleの依存関係について

ご挨拶

こんにちは、Shiotaniです。
毎年恒例、UE4 AdventCalendarが始まりましたね!
qiita.com

さて、今回は、Niagara Moduleにおける依存関係について書きたいと思います。

概要

Niagaraにて、Moduleを追加したタイミングなどにおいて、以下の警告が出たことはありませんか? f:id:yuyasaltcanyon:20181204003337p:plain

一見、胃がキリキリするような警告文に見えるかもしれません。
ですが、Niagaraにおいて、こちらの警告文は非常に強い味方となってくれます。


以下に少し説明が入ります。
実装のみをご覧になりたい方は、こちらをクリックしてください。

この警告はなんなのか?

Module間の依存関係が満たされていない場合に出される警告です。
細かく見ていきましょう。

f:id:yuyasaltcanyon:20181204005129p:plain

以下警告文の内容

  • このModuleは依存関係が満たされていません。
  • 以下のModuleとの依存関係が満たされていません。:"SolveForcesAndVelocity"
  • Fix issueボタンにより、この"DragForce"を"SolveForcesAndVelocity"に対して正しい位置に再配置します。
  • Dismiss issueボタンにより、Fix issueボタンによる修正を行わず、手作業で修正を行う。(何を行っているのかわかっています。)

上2項目は、画像のDragForceを使用するために必要となるSolveForcesAndVelocityが使用されていない。 または、スタックもしくは、ノードの位置関係がおかしい事を指しています。
下2項目は、各々、事前に設定された依存関係をボタン1つで修正するか、警告を無視するかといったものとなっています。

今回のDragForceにおける正しい依存関係とは何か?

f:id:yuyasaltcanyon:20181204012526p:plain
スタックとして、DragForceSolveForcesAndVelocityよりも上に置かれている状況を指します。

「依存関係の設定」字面だけですと、小難しいイメージを抱きそうですが、そんなことはありません。
むしろ、とても簡単です!
次の実践編にて、実際の設定方法などを見ていきます。

前提

  • Unreal Engine 4.21.0を使用しています。
  • Niagaraは、アーリーアクセスです。
    今後実装方法などに変更がある可能性があります。

実践

準備

まずは、以下を用意します。

種類 名称
Emitter NE_Test
Module NM_Parent
Module NM_Child

今回は依存関係のテストのみになりますので、空のEmitterで問題ありません。

実装概要

NM_ParentがEmitter内に存在しない。または、位置関係がおかしい場合、NM_Childに警告文が出るようにしたいと思います。

Module内のDetailsを見てみる

f:id:yuyasaltcanyon:20181204015201p:plain

dependencies(依存関係)の文字が2つあります。
この2つの項目を設定する事により、依存関係を作ることができます。

2つの項目を見てみる

  • Provided Dependencies
    f:id:yuyasaltcanyon:20181204021057p:plain
    IDにより、スタック上における他のModuleに対して提供する依存関係を設定できます。

  • Required Dependencies
    f:id:yuyasaltcanyon:20181204021111p:plain
    IDにより、スタック上における他のModuleから提供されたIDを元に警告文を出すことができます。
    また、Typeにより、Fix issueボタンによる修正時に依存関係にあるModuleより上に再配置するか、下に再配置するかを設定できます。


どちらも共通して配列として追加できるので、複数のIDをもたせることもできます。

NM_Parentの設定

f:id:yuyasaltcanyon:20181204022138p:plain
Provided dependenciesを追加し、IDにはFamilyと設定します。

NM_Childの設定

f:id:yuyasaltcanyon:20181204022303p:plain
Required dependenciesを追加し、IDにはNM_Parentと共通のFamilyを設定します。
Typeは、Pre Dependencyにしておきます。

NE_Testでチェック

youtu.be

動画のようにNM_Parentを追加せずにNM_Childを追加すると警告文がでるようになりました。
そして、Fix issueボタンにより、NM_Parentの下部にNM_Childが再配置されました。

おまけ

NM_ChildのRequired dependenciesにあるTypeを変えてみる。

youtu.be

動画のようにRequired dependenciesにあるTypeを
Pre Dependencyに設定すると、依存しているModuleの下部に再配置され
Post Dependencyに設定すると、依存しているModuleの上部に再配置されます。

まとめ

複数人でNiagaraを使用する場合は、アセットの命名規則と一緒に依存関係も用意しておくと良さそうですね。
今回の依存関係を活用すれば、Moduleの差し忘れやModuleの配置ミスなど細かなヒューマンエラーを回避できるようになるはず!!