このシリーズの記事一覧 (クリックで開閉)
【 ナイアガラ超基礎 】
以前に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
を使わないでシンプルに回転させる方法を一つ紹介した。
まだまだ簡単な例だが、新しいダイナミックインプットと合わせて一つずつ覚えていってもらえればと思う。