解説動画を自前で作ったので、文章でわかりにくい人は先に見てね。
Unreal Engineナイアガラでダメージを与える方法。How to deal damage in Unreal Engine Niagara.
やりたいこと
水鉄砲で発射した水のエフェクトのナイアガラパーティクルがプレイヤーや敵に当たったときに、ダメージを与える処理を目指します。
日本語解説動画
下記参考動画がこま切れすぎるプラス英語なので、日本語用に新たに解説動画を投稿します。
投稿できたらここに動画を貼り付ける予定。
ナイアガラパーティクルを作成(手順A)
- ナイアガラパーティクルを作成
- ParticleUpdateにCollisionを追加
- ナイアガラの UserExposed(ユーザーパラメータ) → プラスボタン → Object → Object を選択
- 名前をつける(今回は BP_CallBack )
- ナイアガラのParticleUpdate(パーティクル更新)のプラスボタン → Export Particle Data to Blueprint
- エミッターのExport Particle Data to Blueprintを選択 → セレクションウインドウ(詳細ウインドウ) → Condition to Export Dataの下三角ボタン → OutPut(出力) Collision Valid を設定
(一時的 Collision Validもあるので間違えないように注意) - Exportの項目 → CallBack Handler → 下矢印ボタン → 手順A-3で作成した BP_CallBackを選択
アクターにナイアガラコンポーネントを追加(手順B)
- ナイアガラシステムを持つActorや銃の鉄砲の弾を作成
- コンポーネントにナイアガラパーティクルシステムを追加
- 手順A-1で作成したナイアガラを設定
- Event BeginPlayから → Set Niagara Variable (Object)(Niagara)を実行 (TargetピンはNiagaraコンポーネント)、In Variable NameピンはBP_CallBack、ObjectピンはSelfを接続
- クラス設定からインターフェースを追加 → Niagara Particle CallBack Handler
- 左側のインターフェースにReceive Particle Dataが出現 → ダブルクリック → Event Receive Particle Data が作成できる
プロジェクト設定にコリジョンを追加(手順C)
- 編集 → プロジェクト設定 → Engine-Collision → New Object Channelを選択
- 名前をVFXNiagara → Defalut Responseを Ignore に設定してAcceptボタンを押す
- VFXNiagaraがプロジェクト設定に追加される
(名前は任意で何でも良いです。自分のわかりやすい名前をつけてください。)
コリジョンの設定(手順D)
- 手順Aで作成したナイアガラを開く
- エミッターのCollisionを選択 → セレクションウインドウ(詳細ウインドウ)の CPU Collision Trace Channel を VFX Niagara に設定
- ナイアガラからダメージを受ける側(Playerや敵)のコリジョン設定 → コリジョンプリセット → Custom → Collision EnableをCollision Enabled(Query and Physics) に設定
- VFX NiagaraのBlockにチェック
- 手順Bで作成したアクターのEvent Receive Particle DataにApplyDamage処理を追加 → パーティクルが衝突したときにダメージを与えたいアクターをDamagedActorピンへ接続
- ダメージを与えられる側(Playerや敵)のイベントグラフに Event Any Damageを追加 → 作成したHP変数などにダメージが入るように設定
- 実行するとナイアガラパーティクルに衝突したときにダメージが入るようになる
参考動画1
参考にした動画 ↓ だいぶ細切れに動画が別れているので概要欄の再生リストから順番にみるのがおすすめ。
Niagara Collision 000 Create Niagara System Fountain
衝突した対象を取得できない?(参考動画2)
上記の方法では衝突したことは検出できましたが、誰に当たったか?の情報を取得することができません。つまり、水鉄砲に当たった対象にダメージを与えることができずに困りました。
そこでまたネットの海を彷徨い参考動画2を見つけたので方法を備忘を兼ねてまとめておきます。
★ ポイント ★
衝突したナイアガラの位置からスフィアトレースを発生させて、トレースに当たった対象を取得することで、水鉄砲が当たったアクターを取得することができる方法です。
ナイアガラの編集
- ナイアガラエディターを開いて、エミッターのパーティクルアップデートからCollisionを追加
- 右の詳細パネルからFix issueをクリックして問題を解決(今回はForceとVelocityモジュールが必要)
- ナイアガラからコールバックを使用してインターフェースNiagara Particle CallBack Handlerを使用できるようにする。(上記参考動画1の手順)
- エミッターに追加したExport Particle Data to Blueprintを選択して詳細ウインドウからパラメータの設定を行う。
- Condition To Export Data の右下三角ボタンをクリック → CollisionValid を検索 → クリックして設定 → OUTPUT COLLISION CollisionValidに表示が変わる
- エミッターのCollisionのRayTracePropertiesのCPU Collision Trace ChannelをEnemyProjectileなどプロジェクト設定で作成した専用のチャンネル?レイヤー?に設定(参考動画1の手順C)
- 手順6で設定したコリジョンを敵やプレイヤー側のブループリントでBlockに設定する
- エミッターのアップデートパーティクルからKill Particleを追加 → 詳細ウインドウから Kill ParticleにOUTPUT COLLISION CollisionValidを設定する
- Export Particle Data to Blueprintを選択 → 詳細ウインドウから Vector to Send(As Struct Position)に 左側のパラメータウインドウから パーティクルPREVIOU Positionをドラッグアンドドロップで設定 → Conversion Operation を Convert to Absolute Large World Space に変更(変更しないと原点付近に当たり判定が生成されます。)
- 同様にVector to Send(As Struct Velocity)にパーティクルPREVIOU Velocityをドラッグアンドドロップで設定
- Float To Send(As Struct Size)に 下三角ボタンから検索 TRANSIENT CollisionSizeを設定
ブループリントの作成
- 参考動画1手順Bで作成したEvent Receive Particle DataにForEachLoopをDataアレイに接続 → ArrayElementからBreak BasicParticleDataにピンを分解
- 分解したピンのPositionにsphereTraceByChannelを接続(画像を参照)
- 新しく別のエフェクトを作成するときに初期化処理を忘れやすいので初期化を忘れずに。
参考動画2
【英語版】Niagara 弾幕ゲームの作り方。UE4 | Niagara collision projectile
Niagara bullet hell game How to UE4 | Niagara collision projectile
コメント