プロジェクタイル(Projectile)の基本

魔法弾や矢などに使うプロジェクタイル(Projectile)の基本設定。Baseさえ作れば、子ブループリントで簡単に様々なパターンを作れます。


魔法弾のエフェクトはInfinity Blade:Effectsが無料です。
Infinity Blade:Effects:Epic コンテンツ | UE マーケットプレイス

Actor

BP: ブループリント クラス
親クラス: Actor
名前: BP_Projectile_Base
Box Collision
コンポーネントにBox Collisionを追加し、DefaultSceneRootに乗せて置き換える。
名前はBoxよりもBoxCollisionのほうがわかりやすい。
コリジョンプリセットをBlockAllDynamicにした後、Customに変更して、トレース応答のみを全て「無視する」にしてください。
Static Mesh
BoxCollisionの子にStatic Meshを追加。名前はMesh。
コリジョンプリセットをNoCollisionにする。
ParticleSystem
BoxCollisionの子にCascade Particle System Componentを追加。
Projectile Movement

コンポーネントにProjectile Movementを追加。

変数の追加

Speed – Float ※デフォルト値は500
MaxSpeed – Float ※デフォルト値は500
Gravity – Float
Target – Actor
IsHoming? – Booleam

この5つの変数の詳細で、「インスタンス編集可能」と「スポーン時に公開」にチェックを入れます。

Projectileの基本設定になりますから、カテゴリーもProjectileSettingsなどにしてまとめておくとわかりやすいです。

イベントディスパッチャーの追加

OnProjectileImpact
├インプット: OtherActor – Actor
└インプット: Hit – Hit Result

コンストラクションスクリプト
ノードを組む

Projectile Movementから線を伸ばしてSet Initial SpeedSet Max SpeedSet Projectile Gravity Scale
TargetはGet→検証済ゲットで配置します。
Projectile Movementの詳細のHoming Acceleration Magnitudeでホーミング時の速度を設定します。とりあえず2000にしておきます。
イベントグラフ
ノードを組む イベント BeginPlay

【変数】
LaunchSound – Sound Base
Play Sound at LocationSoundから線を伸ばして変数へ昇格。カテゴリーをSoundsにしておく。
TargetはGet→検証済ゲットで配置します。
ノードを組む On Component Hit (BoxCollision)

【変数】
ImpactEffect – Particle System
Spawn Emitter at LocationEmitter Templateから線を伸ばして変数へ昇格。カテゴリーをEffectsにしておく。
ImpactSound – Sound Base
Play Sound at LocationSoundから線を伸ばして変数へ昇格。カテゴリーをSoundsにしておく。

例:魔法弾 Actor(子)

例として魔法弾っぽい玉を作ります。

名前: BP_ProjectileMagicBall
BP_Projectile_Baseから「子ブループリント クラスを作成します」で作成。
Speed、MaxSpeed、Gravityを設定する。デフォルト値のままでも良いです。
ProjectileMovementの詳細のプロジェクタイル > Rotation Follows Velocityにチェックを入れると、重力によって発射物が落ちる時に傾いて落ちます。チェックがないと矢でも水平のまま落ちる。
ParticleSystem
ParticleSystemに魔法弾っぽいパーティクルをセットする。
今回はP_FireBall_Baseを使いました。

BoxCollisionの詳細の、
形状 > Box Extentを魔法弾の大きさに合わせる。これが当たり判定になります。
位置を合わせる時は、ParticleSystemのほうを動かして合わせます。BoxCollisionの位置は固定。

魔法弾ですからMeshを空にしてParticleSystemを使っています。これが例えば矢なら、Meshに矢をセットしてParticleSystemを空にするか、矢のエフェクトとしてParticleSystemを使います。
Impact Effect
衝突時のエフェクトをセットする。
Launch Sound

発射時の音をセットする。

Impact Sound
衝突時の音をセットする。

例:発射台 Actor

2秒毎に魔法弾を撃つ発射台です。

BP: ブループリント クラス
親クラス: Actor
名前: BP_ProjectileShooter
Static Mesh

コンポーネントにStatic Meshを追加。
詳細のStatic Meshは適当でいいですけど、とりあえずCubeをセットします。
砲台みたいなStatic Meshを持っていれば、それを使ってください。

Scene

Static Meshの子にSceneを追加。名前をShootPointにします。
このSceneの位置からX軸方向に弾が出ます。
配置した時の方向をわかりやすくしたいならArrowも追加しておきましょう。

ノードを組む

・カスタムイベントの名前をDamagePlayerにしていますが、Enemyにもダメージが入ります。
・ここでは一般的なApply Damageに繋げていますが、私は独自仕様のブループリントインターフェースであるBPI DamagableのTake Damageを使います。
Levelに設置して、BP_ProjectileMagicBallが正しく動作しているか確認。

例:プレイヤーの攻撃 BP_Player

Scene

発射台と同じく、コンポーネントにSceneを追加。名前をShootPointにします。
このSceneの位置からX軸方向に弾が出ます。

イベントグラフ
ノードを組む
・入力アクションは適当に。
クラスからアクタをスポーンしますでBP_ProjectileMagicBallがスポーンされて、Shoot Pointの向きに発射されます。ヒットするとBP_Projectile_Baseで設定したディスパッチャーのOnProjectileImpactが呼ばれて、OnProjectileImpacにバインドしてカスタムイベント DamageEnemyが動きます。
・ここでは一般的なApply Damageに繋げていますが、私は独自仕様のブループリントインターフェースであるBPI DamagableのTake Damageを使います。

参考元

How to Shoot Projectiles in Combat | Unreal Engine 5 Tutorial (Arrows, Spells, Bullets & more) | ue5 | UE5

便利なプロジェクタイル(Projectile)

子ブループリントの設定次第で、魔法や矢や銃弾に使えるプロジェクタイル(Projectile)の設定でした。
VRゲームでも非VRゲームでも様々なゲームで使える便利なものです。

コメント

  1. Dino Sellberg より:

    Outstanding feature

タイトルとURLをコピーしました