このシリーズの記事一覧 (クリックで開閉)
【 ナイアガラ超基礎 】
ビームを例で見ていく。
まずStatic Beam
を追加したナイアガラシステムを作る。
※選択画面にDynamic Beam
というのもある。こちらは上記にUpdate Beam
モジュールが増えただけ。このモジュールは難解なのでひとまずスキップ。
再生してみると...
うん、ビームだ(?)
これが表示されてゆっくり消えていくだけ。
動いたりもしたい。
が、基本はここに詰まっている。
ゲームを作らないのであまり詳しくないのだが、恐らくビームのメリットは終点を明示的に指定できることなのではないだろうか。
適当な方向へ飛んでいってしまうパーティクルと違い、敵にビームを当てるような動作で座標コントロールが可能でプログラムしやすい。
ビームを作る時に使うモジュールは球を飛ばす時とはちょっと挙動が違うのでじっくり理解する必要がある。
というわけで今回も「各モジュールが何をしているか」ということにフォーカスして解説する。
ビームなので当然レンダラはRibbon Renderer
である。
※実はSprite Renderer
でもちゃんとドットが描画される。
レンダラやリボンレンダラがわからない場合は次の記事:【ナイアガラ超基礎 #8】レンダラ基礎+リボンレンダラーの使い方【Unreal Engine】 | 謎の技術研究部
ビーム系を作る時は必ずSpawn Burst Instantaneous
を使う。
なんで?というのには理由があって「時間差で生み出されたパーティクルは別のビーム」という挙動らしく「まったく同時に生成されたパーティクルのみ線で結ぶ」というのがビームだからだ。
ちょっと解釈が難しいかもしれないが、逆に言えばSpawn Burst Instantaneous
を何回かに分けてやれば、複数のビームをつなげること無く分ける事ができる。
※一つのエミッタで複数のビームを打った例。Spawn Burst Instantaneous
が発生する度に新しいビームとして別々に線が結ばれる
これまでのSprite Renderer
の場合Spawnする位置をLocation
モジュールで決めていたが、ビームのときだけなぜか特殊なやり方でロケーション(のようなもの)を定義する。
※ロケーションについては過去の記事を参照:【ナイアガラ超基礎 #7】Locationモジュールとは【UE5】 | 謎の技術研究部
次の2つを必ずセットで使う必要がある。
順に解説する。
エミッタの更新にBeam Emitter Setup
を入れる。
※位置はSpawn Burst Instantaneous
の下になっても良い。
Beam Start
: ビームのスタート位置。細かい設定はどういうわけかダイナミックインプットしか使えない(Make Vector
,Random Vector
等)Absolute ~
: これをチェックしていると絶対値になる。ゲームに配置して動かしたときに常に一定の座標に向かっていくイメージ。Beam End
: ビームの終点。長さなどはここで調節する。Use Beam Tangents
: ビームを捻じ曲げる。難しいので詳しくは割愛。直感的に試すと面白い。※Use Beam Tangents
をいじった例
とにかくここで重要なのは ビームがどこに着地するかをBeam Endに設定しているという点。
かならずこの設定を確認しよう。
Beam Emitter Setup
だけではビームの発生位置は確定しておらず、パーティクルのスポーンにSpawn Beam
を入れて初めてビームが描画される。
なんとこちらはモジュールを挿すだけでOK。設定は必要ない。
ただしSpawn Beamはパーティクルのスポーンに入れるということを間違えないように。
恐らく裏で動いてるコーディングの兼ね合いでこのような構造になっていると思うが、こういうものだと覚えるほかない。
基本的にはここまでの解説でビームは完成しており、描画はされるはず。
ここからは外観を定義していくモジュールを解説する。
パーティクルのスポーンにBeam Width
というものを追加する。
こちらがその名の通りビームの幅を決定するもの。
設定はBeam Width
とBeam Twist Amount
の2つだけ。
Beam Width
にビームの帯の太さを入れれば良い。
システムが用意しているBeamエミッタから作成した場合はここにカーブのダイナミックインプットが入っており、頭と尻尾が細くなるようになっている。
Beam Twist
の値を見る感じ「ビームをねじるもの」っぽいイメージがあるがここの数字をいじってもビームがピクピクするだけで特に変化がないようにみえる。
これは実際にはねじっているのだが「全てのパーティクルが同じ角度ねじられている」ので、ただ全体が回転しているだけの結果になってしまうため。
ここは初心者向けではないのでわからなければスキップでよいが、次のダイナミックインプットを組み合わせるとパーティクルごとに角度に差ができてねじりが表現できる。
Return Normalized Exec Index
はパーティクルに振られた番号を0~1に正規化して返すモジュール。
これを乗算することで後ろのパーティクルにいくほど角度が付くというわけ。
エミッタ1個でビームを何本も撃ちたい場合にSpawn Burst Instantaneous
のSpawn Time
を弄っても、なぜか表示しなくなるだけで意味不明になる初心者は多いと思う。
例えばSpawn Time
に2
を入れた場合は「最初の2秒間は描画しないでね」という設定なので注意だ。
ビームを何本も撃ちたいと言う時はEmitter State
のLoop Duration
を調整しよう。
ただ、このままだと同じ位置に描画されるだけなので、好みの方法でビームをずらそう。
上記の設定で1つのエミッタで複数のビームを発射する例を作る。
Beam Emitter Setup
のBeam End
にSine
, Cosine
を設定した例。
Period
を1
からちょっとずらすことで花びらが重ならないように回転する。
上の設定に加えていつものVortex Force
を入れた例。Gravity Force
はおまけ
正直上の例は単一のビームエミッタを使ってサクッと見栄えが良いもの...で作ったのでビームのメリットが活かせておらず、あまり良い例ではない。
もっと複雑なモジュール+複数のエミッタを重ねてターゲットにスパっと飛んでいく面白いビームを各自つくってみてほしい。
今回はビームを紹介したが、ビーム系を作る時は必ずこの方法でなければいけないわけではない。
この方法は「終点を簡単に設定できる」というメリットを活かすため(だと思う)
軌跡をもっと複雑にしたい場合などでは普通にパーティクルをリボンで繋ぐだけのほうが良いかもしれない。
ちょっとモジュールの種類にクセがあるので完全に覚えなくても気になったらここに返ってきてもらえたら幸いである。
このタイプのエミッタを使うと雷エフェクトが簡単に作れるが、そちらはまた別の記事で。