Unreal Engine 5で、弾を発射する機能を利用して、目標を追尾する弾を発射できるようにします。
弾の向きを進行方向に向ける処理、衝突した際に爆発エフェクトを出す処理も実装します。
この記事では弾を発射する機能の作り方と重複する内容は省略します。
必要に応じて以下の記事を参考にしてください。
ブループリントインターフェースの作成
弾を発射するキャラクターブループリントで追尾弾を生成した時に、追尾目標の情報を弾のブループリントに渡すためのブループリントインターフェースを作成します。
ブループリントインターフェースは、他のブループリントを参照するためのインターフェースです。
詳しくは以下の記事を参照してください。
アセットの作成
- 「コンテンツブラウザ」でフォルダを選択
- 「追加」をクリック
- 「ブループリント」の「ブループリントインターフェース」を選択して、アセットを作成
関数の作成
作成したアセットに、キャラクターブループリントで呼び出す関数を作成します。
- 作成したアセットを開き、自動作成されている関数の名前を設定
- 「詳細」の「インプット」右にある「+」をクリックして入力引数を追加
- 追加した引数の名前を設定
- 引数の型に「Actor」型のオブジェクト参照を設定
追尾弾のブループリントの作成
追尾弾のメッシュや移動パラメータなどを設定するためのブループリントを作成します。
アセットの作成
- 「コンテンツブラウザ」でフォルダを選択
- 「追加」をクリック
- 「ブループリントクラス」を選択し、「親クラスを選択」ウィンドウを開く
- 開いたウィンドウで、「Actor」を選択し、アセットを作成
コンポーネントの追加
- 作成したアセットを開き、「コンポーネント」の「追加」をクリック
- 「Capsule Collision」、「Static Mesh」、「Projectile Movement」をそれぞれ選択
コンポーネントの構成変更
- 追加したCapsule CollisionをDefault Scene Rootの場所にドラッグ&ドロップし、ルートコンポーネントに設定
Static Meshの設定
Static Meshコンポーネントを選択し、「詳細」の項目を設定します。
- 「スタティックメッシュ」の「Static Mesh」に追尾弾用のメッシュを選択
- 「トランスフォーム」の「位置」、「回転」を設定
- 「コリジョン」の「コリジョンプリセット」に「No Collision」を設定
Capsule Collisionの設定
Capsule Collisionコンポーネントを選択し、「詳細」の項目を設定します。
- 「形状」の「Capusle Half Height」、「Capsule Radius」を設定
- 「コリジョン」の「Simulation Generates Hits Events」にチェックを入れる
- 「コリジョン」の「コリジョンプリセット」に「Custom」を設定
- 「コリジョン」の「コリジョンプリセット」で詳細項目を設定
Projectile Movementの設定
Projectile Movementのコンポーネントを選択し、「詳細」の項目を設定します。
- 「プロジェクタイル」の「Initial Speed」、「Max Speed」、「Projectile Gravity Scale」を設定
- 「ホーミング」の「Homing Acceleration Magnitude」を設定
- 「ベロシティ」の「Velocity」を設定
※座標系は「ビューポート」ウィンドウ内の座標です。
「プロジェクタイル」で設定したSpeed×このVelocityが実際の移動速度になります。
覚え書き
- 「プロジェクタイル」の「Rotation Follows Velocity」は、「ビューポート」ウィンドウ内座標のY軸方向が速度方向になるように、アクターを回転させます。
- 発射直後から追尾させる場合は、「ホーミング」の「Homing Acceleration Magnitude」にチェックを入れます。
インターフェースの追加
追尾目標の情報を受け取れるように、ブループリントインターフェースを追加します。
- 「クラス設定」をクリック
- 「詳細」の「インターフェース」で、「実装インターフェース」右の「追加」から、追尾目標の情報を渡すために作成したブループリントインターフェースを選択
追尾弾の処理の作成
追尾弾のブループリントのイベントグラフに、追尾目標設定などの処理を作成します。
追尾目標を設定する処理
弾を発射するキャラクターブループリント内で、追尾弾のブループリントを指定して、追尾目標を設定する関数を呼んだときに、この処理が実行されます。
全体
全体としては、関数が呼ばれたときに処理が始まり、引数のアクターを追尾目標に設定した後、一定時間後に追尾機能を有効化しています。
詳細1
- 「Event 関数名」で関数が呼ばれたときに処理を実行
- 「Set Homing Component」で、アクターのルートコンポーネントを指定して、Projectile Movementコンポーネントの追尾目標を設定
詳細2
- 「Delay」で処理を1秒間停止
- 「Set Is Homing Projectile」で、Projectile Movementコンポーネントの追尾機能を有効化
衝突時の処理
- 「Event Hit」で衝突時に処理を実行
- 「Spawn Actor From Class」で、選択した爆発のブループリントを、指定したTransformで生成
- 「Destroy Actor」で追尾弾を削除
Tickごとの処理
- 「Event Tick」でTickごとに処理を実行
- 「Set Actor Rotation」で、Z軸がVelocityベクトル方向に向くように、追尾弾のRotationを設定
入力アクション作成/入力マッピング追加/ソケット追加
マウスの右クリックを押すと肩の武装から追尾弾を発射するようにします。
弾を発射する機能の作り方と同様のため省略します。
キャラクターブループリント修正
弾を発射させたいキャラクターブループリントのイベントグラフに、弾を発射する処理を追加します。
追尾弾を発射する処理
イベントグラフが大きいため、概略のみ紹介します。
全体
全体としては、追尾弾を発射するボタンが押されたときに処理が始まり、追尾目標を取得した後、追尾弾を生成してから追尾目標を渡す関数を呼んでいます。
概略1
- 「Enhanced Action Events 入力アクション」で、発射ボタンが押されたときに処理を実行
- 折りたたみノード内で、「Sphere Trace For Objects」を使って追尾目標となるアクターを取得し、変数に格納
概略2
- 「Is Valid」で格納したアクターが有効か判定し、有効なら処理を継続
- 折りたたみノード内で、「Spawn Actor From Class」を使って追尾弾を生成
概略3
- ブループリントインターフェースに設定した「追尾目標を渡す関数」で、追尾弾に追尾目標とするアクターを渡す
ここまでで、ボタンを押すと、キャラクターが取得した目標を追尾する弾を発射できます。
以上です。
コメント