PR

【UE5】弾を発射する機能の作り方

Unreal Engine 5

Unreal Engine 5で、キャラクターが弾を発射する機能を作ります。
FPSテンプレートの機能を簡略化したものを1から実装します。

FPSテンプレートを作成して開き、弾のスタティックメッシュを右クリック→「アセットアクション」→「移行」→マテリアルとメッシュにチェックが入っているのを確認して「OK」→移行先のプロジェクトの「Content」フォルダを選択して「フォルダーの選択」でアセットを取り込みます。

移行したアセットは、移行先のプロジェクトのコンテンツフォルダの下にコピーされるので、必要に応じてフォルダを整理します。

スポンサーリンク

弾のブループリントアセットの作成

弾のメッシュや移動パラメータなどを設定するためのブループリントを作成します。

コンテンツブラウザでフォルダを選択→フォルダ内で右クリック→「ブループリントクラス」→「Actor」で作成します。

スポンサーリンク

コンポーネントの変更

作成したアクタブループリントに、弾のメッシュなどのコンポーネントを追加します。

コンポーネントの追加

ブループリントを開き、「コンポーネント」の「追加」→「Sphere Collision」を選択します。

追加したSphere Collisionを選択した状態で、「追加」→「Static Mesh」を選択します。

「追加」→「Projectile Movement」を選択します。

構成の変更

ここで、Sphere Collisionを、DefaultSceneRootにドラッグ&ドロップして、上書きしておきます。
これで、(この記事では不要ですが)物理演算を適用した際に、アクタが移動しなくなる現象を避けられます。

スポンサーリンク

パラメータの変更

弾の大きさや速さ、スタティックメッシュを設定します。

スタティックメッシュの設定

Static Meshを選択して、「詳細」の「Static Mesh」に弾のスタティックメッシュを設定します。

大きさの調整

Static Meshを選択して、「詳細」の「トランスフォーム」でメッシュの大きさを、Sphere Collisionを選択して、「詳細」の「Sphere Radius」でコリジョンの大きさを調整します。
キャラクターのロボットは大きめのモデルなので、メッシュの「拡大・縮小」を0.2、コリジョンの「Sphere Radius」を初期値の32にしました。

接触時の挙動設定

Sphere Collisionを選択して、「詳細」の「コリジョンプリセット」をFPSテンプレートと同様に設定します。
これは、弾が接触した時の挙動を、接触相手の種類ごとに設定するものです。

移動動作の設定

Projectile Movementを選択して、「詳細」の「Should Bounce」にチェックを入して弾が跳ね返るようにし、「Velocity」で弾の速さを設定します。

ロボットのキャラクターブループリントで前方向となる、X軸方向の値を設定しました。

生存時間の設定

アクタブループリントを選択して、「詳細の」の「Initial Life Span」で弾が自動的に削除されるまでの時間を設定します。

スポンサーリンク

弾の衝突処理の作成

弾が何かに衝突した時に力を加えてから消滅する処理を、イベントグラフで作成します。

全体

全体としては、弾がオブジェクトに衝突した場合に、相手に衝撃力を与えて、弾を削除する流れです。

詳細1

弾がオブジェクトに衝突した場合に、そのオブジェクト取得し、物理演算が有効か確認します。
物理演算が有効な場合は処理を続けます。
また、弾の速度を使った衝撃力計算と、弾の位置の取得をします。

詳細2

衝突したオブジェクトの物理演算が有効だった場合、弾が衝突した位置に衝撃力を与え、弾を削除します。

スポンサーリンク

入力アクションの作成

発射処理の入力情報の型(ボタンのオンオフ、2次元のベクトルなど)を定義するアセットを作成します。

アセットの作成

コンテンツブラウザでフォルダを選択→フォルダ内で右クリック→「入力」→「入力アクション」で作成します。

アセットの設定

作成したアセットを開き、「Value Type」で「Digital(bool)」を選択→「Triggers」横の「+」で要素を追加→「Pressed」を選択します。
これで、プレイヤーがボタンを押したときに、Boolean型で入力情報を取得する設定になります。

スポンサーリンク

入力マッピングの追加

入力マッピングコンテキストに、弾の発射に対応するプレイヤーからの入力情報(デバイスやボタンなど)を追加します。

入力マッピングコンテキストを開き、「Mappings」横の「+」で要素を追加→弾発射用の入力アクションを選択→入力アクション横の「+」で要素を追加→「マウスの左ボタン」、「ゲームパッド右トリガー」を選択します。

発射ボタンを変更する場合は、ここのボタン設定を変更してください。

スポンサーリンク

ソケットの追加

キャラクターのスケルタルメッシュに、弾を発射するためのソケットを追加します。

構成の変更

スケルタルメッシュを開き、「スケルトンツリー」でソケットの親とするボーンを右クリック→「ソケットを追加」で追加します。

位置の調整

ソケットを、プレビュー内のウィジェットや「詳細」の「Relative Location」の値で、弾の発射位置に移動します。
プレビューを平行投影のワイヤーフレーム表示にすると、ソケットとメッシュの位置関係が分かりやすく、調整しやすいと思います。

スポンサーリンク

キャラクターブループリントの変更

弾を発射する処理をブループリントに追加します。

全体

全体としては、キャラクターの位置姿勢から発射位置と方向を決めて、発射ボタンの入力があった場合に弾を生成する流れです。

詳細1

キャラクターのスケルタルメッシュから、ソケット名でソケットの位置を取得します。
それとは別に、キャラクターの姿勢からグローバル座標での、発射位置ずらし量を計算して足すことで、発射位置を決めています。
発射方向はキャラクターの向いている方向になります。
発射位置をずらす必要がなければ、ソケットの位置をそのままTransformのLocationにします。
また、発射方向としてカメラを参照する場合は、FPSテンプレートのように「Get Player Camera Manager」ノードと「Get Camera Rotation」ノードを使うと良さそうです。

詳細2

発射に対応するボタンが押されたときに、作成したTransformの位置姿勢で、アクタとして弾を生成します。

スポンサーリンク

目標物の設置

ここまでで弾を発射する機能は実装できていますが、せっかくなので弾を当てる目標となるアクタを設置します。

ビューポートへの追加

「コンテンツブラウザ」で、StarterContentフォルダ→Shapesフォルダ→Shape_Cubeをビューポートにドラッグ&ドロップします。

パラメータの設定

追加したShape_Cubeを選択し、「詳細」の「Simulate Physics」と「Mass」にチェックを入れ、「Mass」を設定します。
位置や大きさは適当に調整してください。
冒頭の動画では、弾の速度が50000、Shape_Cubeの「Mass」が5000にしています。

以上です。

コメント

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