moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

【UE4】Niagaraのエフェクトを再生する

f:id:tktknkyo:20200413163005p:plain

Verは4.24です

 

 

【初めに】

今回の記事は、エフェクトそのものを作る内容ではありません

Niagaraで作成したエフェクトの再生関係の内容となります。

Niagaraでエフェクトは作れたけど、良い感じに再生ができない!

などの場合に参考にしてもらえればなと思います。

 

【基本】

かなり基本となる部分から

 

f:id:tktknkyo:20200413164239p:plain

レベルにそのまま配置するだけであれば

ドラッグ&ドロップでカスケードと同じように配置できます。

 

f:id:tktknkyo:20200413164644p:plain

特定のボタンを押したとき、などの場合はこのようになります

とりあえずキーボードのAキーにしてますが

 

カスケード用とは少しだけ名前が変わります

Spawn System at Location

Niagara

Spawn Emitter at Location

がカスケード用となります

 

f:id:tktknkyo:20200413164911p:plain

プレイヤーの位置にエフェクトを再生する場合は

座標をそのまま接続すればいいです

 

ただし、Niagaraの場合Locationは発生位置そのものというより

Engine.Owner.Position

に情報を渡すだけとなります

 

BPから再生は、被ダメ時やモーション再生時などでもできます

この辺はカスケードと同様かなと。

 

【アニメーション連動】

 

f:id:tktknkyo:20200413165748p:plain

今のVerではPlay Niagara Particle Effect

がアニメーション通知で利用する事ができます

これにより、アニメーションシーケンス上でエフェクトを再生する事も可能です

 

f:id:tktknkyo:20200413165935p:plain

設定出来る内容はこのようになっています

座標変更などはある程度はできますが、ある程度でしかできません。

 

f:id:tktknkyo:20200413170044p:plain

なので、このような、User.系統のデータを操作する事がデフォルトでは出来ません。

なので通知を作ってみよう、という事になります。

 

【アニメーション通知を作る】

f:id:tktknkyo:20200413170500p:plain

アニメーション通知を作るためのBPを作ります

Anim 辺で検索すれば出てくるかなと

このAnimNotifyで作ります。

 

f:id:tktknkyo:20200413171313p:plain

上の関数のところから、オーバーライドを選択して作ります。

 

f:id:tktknkyo:20200413171356p:plain

そうすると、この二つのノードが出てきます

あとはこの中で処理を作るだけです。

 

この時点で、アニメーションシーケンス側から

通知で出せるようにもなっています

 

 

f:id:tktknkyo:20200413171847p:plain

恐らくですが、最低限必要と思われる要素はこちらになると思います

アニメーションさせるキャラの座標を持ってくる場合は

Mesh CompからGetWorldLocationで座標を取得しましょう。

ここから更に動かすば場合は、ここにVector+Vector等を追加して、座標を動かします。

 

RotationやScaleは自分の操作しやすいように作っていくのがベストかなと

 

f:id:tktknkyo:20200413172246p:plain

また、アニメーションシーケンス内で操作する場合

変数をインスタンス可能な状態にしておきましょう、右の目のアイコンをクリックするとONにできます

 

あとは、シーケンス上から変えたいパラメータを入れておけばOKです

 

 

【条件によって再生を変える】

 

アニメーション通知を使った例でもう一つ

条件によって再生を変えるというものですが

何の為かというと、属性差分を作りたいなと

 

BPで再生するエフェクトを分離させるだけなら楽ですが

アニメーション通知もBPなので、通知でも同じだろう、という事で作りました。

 

f:id:tktknkyo:20200413191751p:plain

自分が作ったものはこちら

解りやすいようにとりあえず分離は二つにしています。

 

まず属性の判定は、BPインターフェースを使って

現在の属性に使っている変数を取得してきます。

 

属性によって再生するものを分ける処理は

整数型で分離する専用ノードがあるので、これを使うだけです

 

f:id:tktknkyo:20200413192527p:plain

ここに変数のセットが入っていますが

これにはローカル変数を使っています。

 

f:id:tktknkyo:20200413192649p:plain

普通の変数の場合、GetはできますがSetはできない為です。

また、変数をそのまま繋げてはいけない理由として。

 

f:id:tktknkyo:20200413192801p:plain

Niagaraを再生するノード自体が、一つしか変数を入れることができない為です。

なので、条件によって、どちらを取得するのかを、選択し

選択したものを、一度ローカル変数に保存します

そして、そのローカル変数に代入されているデータを再生します。

機能としてはこれにて完成です。

 

大事な点としては

・どれを再生するのかの変数を持ってくる

・その変数で分離する

・一度ローカル変数に保存してから再生する

 

主にこの三つだと思います。

ローカル変数は使わずに済む方法もありそうでしたが

そこまでは自分では判断できませんでした。

 

f:id:tktknkyo:20200413193150p:plain

先ほどので完成はしましたが

確認が面倒なので、確認用の機能も入れたのがこちらになります。

 

上の赤枠部分を追加しただけです

 

やっていることは単純で、Spawn0という名前の変数がONの場合

再生するエフェクトのIDを固定する、というものです。

 

ゲーム中には再生を分けれても、シーケンス上で分ける手段が無かったので

強引に再生するものを弄るものです。

確認しやすくする機能も、あると作る側としては楽になりやすいかなと。

 

 

 

今回はここまでとなります。

発生の制御関係については、あくまで再生に必要だから作っただけであって

そちらがメインではないので

もっとやりやすいやり方、などもあると思います。

あればそっと教えてくれると幸いです。