このシリーズの記事一覧 (クリックで開閉)
【 ナイアガラ超基礎 】
以前にVelocity(速度)のモジュールを使ってパーティクルを動かす記事を書いた。
【ナイアガラ超基礎 #6】Velocityとは【UE5】 | 謎の技術研究部
またForceというモジュールでも力を与えられるが、こちらはまだ解説していない。
今回はこの2種類を使わないパターンの回転を紹介する。
ダイナミックインプットを使うのでわからない方は次
【ナイアガラ超基礎 #9】ダイナミックインプット(動的入力)とは? | 謎の技術研究部
今回作るのは次の作例
上のように各個体がそれぞれの軸で回転するようなモジュールの組み方を解説する。
※パーティクルが打ち上げられて落ちる動作はFountainテンプレートとほぼ同じなので解説しない
回転のついでに自前で変数を用意して、その値を再利用してやる方法も紹介する。
ナイアガラではこの変数を「パラメータ」と呼ぶ。
この記事では次の動画のように星が飛ばせるところまでは誰でも作れるという前提で話をすすめる。
基本はFountainのテンプレートにてSpriteのマテリアルを星にかえただけだ。
まだ回転は組み込まれていないので星が飛んでいくだけとなっている。
自分で再現する場合、星のテクスチャは上を自由に使ってもらえればと思う。
実は次の記事の最下部で紹介したものとほぼ同じものを作っている。
【ナイアガラ超基礎 #11】パーティクルにマテリアルを付ける【Unreal Engine】 | 謎の技術研究部
こちらの記事ではParticleRotationという変数を直接書き換えて回転させているが、今回はモジュールを使う。
まだナイアガラでマテリアルの使い方などがわからない場合は上の記事から読んでもらえればと思う。
以前紹介している記事ではSprite Rotationという変数に直接値を加算して回転させていたが、実はモジュールに回転をコントロールするものがあるのでそちらを使う。
本記事のメインモジュール。
パーティクル更新にSprite Rotation Rateというモジュールを追加しよう。
設定は次のRotation Rateを変更するだけで回転が加わるというシンプルさだ。
正直これで本記事は解説完了と言っても良い。非常に簡単かと思う。
適当に300を設定した例。
はい、完成!
なのだが、上の動画でなにか違和感があるのは分かるだろうか?
このRotation Rateは定数を入れてしまうと一方向にしか回転しない。
また当然ではあるが、回転速度も一定だ。
非常にシンプルなモジュールだが、回転にバリエーションをもたせたい場合は少し工夫が必要そうだ。
回転はマイナス値を入れれば左に回る。
というわけでここにダイナミックインプットであるRandom Range Floatを使ってランダム値をマイナスからプラスへ入れればよい。
このやり方だと毎フレームごとに乱数が設定されるので星がプルプルするのでは?と気付いた人は鋭い。
実は、このRandom Range Floatが良くできていてパーティクル更新の中にあってもEvaluation TypeがSpawn Onlyになっていれば乱数の発生は最初の1度きりとなるためプルプルしない。
左右にランダムで回っている
ここからは少し難しくなる。
上の例では-300 ~ 300の間で乱数が発生するので、1とか5とか非常に小さい値が返った時は殆ど回転しないスプライトが飛ぶことになる。
返ってくる値を-300 or 300の2通りして、常に固定速度で左右に回転させたい。
上でも書いているが、パーティクルの更新でダイナミックインプットで乱数を入れると、毎フレームごとに乱数が更新されるので本当なら星がプルプルしてしまう。
上の例はRandom Range Floatがソレを防止してくれていたので実現できたが、ここからのケースはパーティクルの更新ではなくパーティクルのスポーンを使う必要がある。
つまりパーティクルが生み出された時に1回だけ処理が走るため、乱数の生成は1度きりとなるわけだ。
ここからは実際の手順を追いながら理解してもらえたらと思う。
まずはパーティクルが生み出された瞬間に右に回るのか、左に回るのかを決定する。
つまり新しい「パラメータ」を作ってそこに数値を保存してやる必要がある。
まずは追加ボタンを押して
一番下までスクロールして「新規または既存のパラメータを直接設定」
そうすると「パラメータを設定」というモジュールが出てくるので、こちらのプロパティをいじる。
こちらで+ボタンをおして
ここでも「新規パラーメータを作成」する。
共通の中にFloatがあるので選択。もちろん検索で出しても良い。
これで一つのパラメータを作ることができた。ここには自由に名前をつけて値を保存しておける。
ひとまずrandomRotationという名前にしておいた。
Uniform AOr BFloatを使う先程作成したパラメータにダイナミックインプットのUniform AOrBFloatを設定する。
これは入力したAとBの値どちらか片方をランダムに出力するもの。まさに今回の作例にもってこい。
設定は上のようにした。
Distribution Weightはこのランダムの偏り具合の設定。
どちらも同じ確率で出てほしいので0.5でOK。
Sprite Rotation Rateに作ったパラメータを入れるここまでの設定で、パーティクルがスポーンした時に1度だけ-300か300の値がrandomRotationというパラメータに格納される。
しかし、このままだと実際に回転させる値につなげていないので何も起こらない。
というわけでパーティクル更新に設置してあるSprite Rotation RateのRotation Rateに先程作成したパラメータをダイナミックインプットとして入れてやる。
次のようになれば設定完了
さて、これで左右に常に300のスピードで回る様になったはずだ。
せっかくなので作例を出す前にカラーを設定しておく。
Initialize Particleを選んで
カラーを次のように設定
Color Mode = Random Hue/Saturation/Valueを使うと色相の違う色をランダムに出力できる。
Scale Colorモジュールを追加して、徐々にフェードアウトして消える設定も作ったが、これはお好みで。
※Scale ColorはInitializeの外でもカラーを調整できるようにするモジュール。
次のような作例となった。
※星のパーティクルは可愛い気がするので好み。なぜかはわからないが。
今回はパーティクルをVelocityやForceを使わないでシンプルに回転させる方法を一つ紹介した。
まだまだ簡単な例だが、新しいダイナミックインプットと合わせて一つずつ覚えていってもらえればと思う。
