Gaming Life

一日24時間、ゲームは10時間

UE4 Niagaraを触ってみる(4) StaticMeshの形にパーティクルをスポーンさせる①

 YouTubeで見つけて以来ずっと作りたかったNiagaraエフェクトが出来た。

 というわけで今回はこれの解説を。長くなるので記事を2回に分けて投稿。

ai-gaminglife.hatenablog.com

環境

UE4.20.0

Sample Static Meshモジュールについて

 Niagara Moduleとして予め用意してあるStaticMesh関連のモジュールはいくつかある。その内使用するのは"Sample Static Mesh"と"Static Mesh Location"。まずはこの2つがどのようなモジュールかをみていく。

 Content Browserから Niagara Content -> Modules -> Spawn -> MeshInterfaces -> SampleStaticMeshで"Sample Static Mesh"の中身を見ることが出来る。

f:id:ai_gaminglife:20180722114414p:plain

 これが"Sample Static Mesh"の中身。

 Map Getで Module.○○ ピンを追加するとエミッター編集画面でそのパラメータを編集することが出来る。

 ここではModule.StaticMeshで取得したStaticMeshからそのMesh上のランダムな位置の法線、色、位置等の情報を取得し、それを "Particles.Module.Mesh○○" という形でMap Setしている。これで他のモジュールからParticles.SampleStaticMesh.Mesh○○という形で入力として与えたStaticMeshの情報を取得することが出来るようになる。

Static Mesh Locationモジュールについて

 続いてStaticMeshLocationを見てみる。

f:id:ai_gaminglife:20180722114425p:plain

全体図。ここでは全体は解説せず、必要な部分だけを抜き出して解説する。

f:id:ai_gaminglife:20180722114508p:plain

 Map GetでParitcles.SampleStaticMesh.MeshPosition、つまりSample Staic Meshの入力として与えたStaticMesh表面の位置等を取得している。

f:id:ai_gaminglife:20180722114518p:plain

 ごちゃごちゃ色々な処理が書かれているが重要なのは赤で囲んだ部分だけ。コメントで囲まれた部分で調整されたParitcles.SampleStaticMesh.MeshPositionをParticles.Position、つまりパーティクルそのものの位置としてSetしている。

StaticMeshの形にパーティクルをスポーンさせる

 Niagara Emitterを新規作成。不要な以下のモジュールを削除する。

  • Paritcle Spawn -> Add Velocity
  • Particle Spawn -> Sphere Location
  • Particle Update -> Acceleration Force

 続いてParticle Spawnに"Sample Static Module"と"Static Mesh Location"モジュールを追加する。この時追加する順番を間違えないように。

 Sample Static MeshのStatic Meshパラメータに好きなメッシュを設定する。今回はスターターコンテンツに入っている椅子を設定した。

 分かりづらいが椅子の形にパーティクルが配置されている。ただこれでは分かりづらいので次の項でパラメータを調整していく。

パラメータを調整する

 今のままでは何度もパーティクルがスポーンされて良くない。最初に一回だけポンと出現させて消えてほしい。

 これには"Spanw Burst Instantaneous" モジュールを使うとよい。CascadeのSpawnモジュール、にあったBurstに相当するものでSpawn Countに与えた数だけ最初にパーティクルをスポーンさせる。

 Emitter Update -> Spawn Rateを削除し"Burst..."モジュールを追加。Spawn Countを2000に設定する。

 何度もBurstが繰り返されてしまっている。今回は1回だけBurstして終わってほしい。これはEmitter Update->Emitter Life CycleのMaxLoopCountを1に設定すればよい。こうすると、NextLoopDurationだけ時間が経過すると自動で終了するようになる。

 Particle Spawn -> Set VariablesでLifetimeとSpriteSizeを変更することでパーティクルの寿命、サイズを設定することが出来る。今回は画像の様に値を設定する。

f:id:ai_gaminglife:20180722114633p:plain

 最後に色を設定する。色はParitlce Update -> Colorで設定されている。

f:id:ai_gaminglife:20180722114640p:plain

 赤で囲んだアイコンをクリックすると見慣れたカーブ編集画面に移ることが出来る。カーブエディタで好きな色に設定する(4.20.0時点でカーブエディタはかなり不安定なので注意。私はクラッシュした)。

f:id:ai_gaminglife:20180722114650p:plain

 これで完成。

 ここまで理解できれば後はそこまで難しくない。続きは次の記事で。