アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE5】Niagaraでミサイルを作る。

ミサイル作ります( ゚Д゚)

今回はぷちコンで自作していた、

Niagaraでのミサイル処理を作ってみようと思います。

※UE5.1を使用しています

※説明の誤りや不明瞭な点はコメントいただけると幸いです。

※サンプルも用意しました。見てみてください。

ミサイルエフェクト作り

それではミサイルをNiagaraで作成していきたいと思います。

その前にフォルダごとに色々分けようと思うので、

Missileフォルダを作りそちらにミサイル関連の処理等をまとめます。

ミサイル用のフォルダ管理

それではNiagaraのMissileのエフェクトを作成していきます。

NiagaraSystemではEmptyのNiagaraSystemを作りましょう。

作り終わったら下記のようにNiagaraの設定画面になります。

NiagaraSystemの画面

それでは実際に設定していきたいと思います。

まずレンダリングをMeshRendererに変更します。

MeshRendererへの変更

Emitter StateについてですがselfのOnce(一度だけ出現)するようにしてください。

onceの中でもInfinityの設定もあるのでこちらをCompleteに設定しておきます。

エミッタの設定

SpawnRateを追加して設定します。

SpawnRateを1に設定して一度のエフェクトで一つ出るようにします。

SpawnRateの追加と設定

InitializeParticleの設定をします。

LifetimeModeをDirectSetにしてLifeTimeを2.0にします。

表示されている時間を設定します。

InitializeParticleの設定

AddVelocityを追加して、

飛んでいく移動量とモードを設定をしていきます。

VelocityModeを「FromPoint」にして「LifeTime」を2にします。

AddVelocityの追加

続いてユーザーパラメータを作成します。

こちらはロックオンしてホーミングする位置情報になります。

ユーザー設定から誘導する位置を設定します

上記のユーザーパラメータの方で追加したLockPositionを使用して、

SpringForceを使って指定した位置に飛んでいくように設定していきます。

ホーミングの動きはSpringForceを使って再現してます。

SpringForceの追加

続いてCollisionの設定をします。

Collisionを設定することにより何かに当たった時の判定を取るために必要です。

Collisionの追加

続いてNiagaraとBPとの連携をするために、

ExportParticleDataToBlueprintを設定します。

その前にユーザーパラメータでCallBackObjectを追加します。

CallBackObjectの追加

ユーザーパラメータを追加したらExport Particle Data to Blueprintを設定します。

②で出力するタイミングにCollisionValidを設定します。

これで当たった時の情報を渡すことができます。

③のCallBackHandlerに先ほど作成したCallBackObjectを設定してあげます。

これで設定は完了します。

ExportParticleDataToBlueprintの設定

最後にKillparticlesを追加します。

②で削除される条件として何かに当たった場合の「CollisionValid」を設定します。

Killparticle

続いて簡単なミサイルのトレイルの作成をします。

先ほど作成したミサイルのエミッタをコピーします。

コピーしたら不必要なスクリプトが多いので、

いらない処理は削除しておきます。

トレイル側のNiagaraのエフェクトの修正

続いてレンダリング項目の部分をMeshRendererから、

SpriteRendererに変更します。

SpriteRendererに変更する

続いて先ほど作ったミサイルに追随してエフェクトが出るように、

Spawn Particles from Other Emittterを追加します。

そのまま追加するとエラーが発生してしまうので、

「問題を修正」を押すとSampleParticlesFromOtherEmitterが追加されます。

Spawn Particles from Other Emittterの追加

問題が修正されたらEmitterNameと各種設定を変更します。

SpawnRateを1000にしてSpawnRatePerParticleCapを10000にします。

SpawnParticlesfromOtherEmitter

これでミサイル側のエミッタの作成は完了です。

実際に作成が完了した場合下記のような状態になります。

ミサイルのエミッタの中身

ミサイルとは別に爆風のエフェクト作成しました。

こちらも解説してほしいなどありましたらコメントいただけると幸いです。

※今回はミサイル部分の説明をメインにしてます。

爆発エフェクトのエミッタ

・目次に戻る

敵をロックオンする処理

先ほどまで説明していたエミッタを使用して、

ロックオンして飛ばす処理を作成していきます。

まずは入力から作っていきます。

UE5.1はEnhanced Inputを主体とした入力なので入力アクションを作ります。

入力アクションの作成

アクションを作成したら入力マッピングに追加して、

入力アクションイベントを追加してあげます。

※今回はキーボードRキーを押したらロックする仕組みになってます。

入力マッピングの追加

入力設定が完了したらロック用のWidgetとターゲット用のActor、

ロックした敵の位置を渡すためのインターフェースを追加します。

今回のミサイル用に追加する各種ファイル

ロックシステムのWidgetを作成して、

CanvasPanel内にImageを一つ追加したような形になります。

システムの修正作業

それからインターフェースですが、

今回はVector(ロックしている敵の位置)を渡すための関数一つのみです。

インターフェースの関数を追加

ミサイル処理を作成する準備は整ったので、

実際にミサイルの処理を作成していきます。

まずはロックされるActor内の処理になります。

〇ロックオンしたときの表示切替動作

Actorが見える範囲にいてまだロックされていない場合に、

ロックをしてWidgetを表示した後、敵の位置情報をインターフェースで渡す。

〇ロック解除時の動作

ロックされている場合に、ロックフラグをオフにしてWidgetの表示もオフにする。

ロックされるアクター側の処理

最後に操作する側の処理を追加します。

まずは操作キャラにArrowを追加して、

ミサイルが最初に出現する場所を作ってあげます。

ミサイル出現位置用のArrowを追加

Arrowを追加したらミサイルで使用する、

イベントや変数などを作成します。

ミサイル関連のアクションイベントや、

ミサイル生成関数・Niagaraや作成したインターフェースの追加

ターゲット位置のVector配列があります。

各種アクション・インターフェース・変数の追加

インターフェースの追加方法が分からない人がいるかもしれないので、

一応インターフェースの追加方法も書いておきます。

クラス設定から実装インターフェースの追加ボタンを押して、

インターフェースを指定すれば追加できます。

インターフェースの追加方法

実際に内部の処理について説明していきます。

まずはNiagaraのミサイルを生成する関数から。

SpawnMissile関数を作り、インプットにcomponentとVectorを追加します。

追加した情報を元にSpawnSystemAtLocationでミサイルエフェクトを追加して、

CallBackObjectと飛んでいくVector情報をナイアガラパラメータに渡します。

SpawnMissile関数内の処理

続いてターゲットをロックしてミサイルを発射して、

ミサイルのロックを解除するまでの処理になります。

〇敵のロックオン処理

ロックボタンを押したら敵をロックする。

ロックが行われると右側のロックした位置をもらう、

インターフェースのイベントが発生する。

〇ミサイルのエフェクト生成

forEachLoopでミサイルエフェクトを生成

ターゲット位置情報を渡しつつエフェクトを生成していく。

最後にターゲット位置配列情報を消して、

ターゲット表示も消す

ミサイルロックして発射、ロック解除までの流れの処理

Niagaraのエフェクトが当たった時のイベントになります。

こちらは当たった位置で爆発エフェクトを発生するようした処理になります。

ミサイルが当たった場合のエフェクト処理

実際に作成したものはこのような形になっています。

・目次に戻る

最後に

ここまでだいぶ長かったですが見ていただきありがとうございます。

このブログを見返して思ったのですが、

初心者向けといえるほど基礎的かつ役立つ情報があまりないので、

そういった情報を増やしていけたらと思います。

・目次に戻る