ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【ゼロからアンリアルエンジン5】〔アイテム編〕④武器インベントリシステムと射撃システムを作ろう

目次

 

はじめに

 

前回の続きです。

 

namiton.hatenablog.jp

 

▼この記事でできること

 

解説

 

⓪アイテムベースの更新

 

アイテムも重力を適応したいので①で作成したアイテムベースを更新いたしました。

元記事では更新済みですのでここでは以前のバージョンで作成された方に向けて変更箇所を解説します。

namiton.hatenablog.jp

 

BP_ItemBaseの更新

これまでは子でメッシュを追加していましたがBaseにメッシュを持たせます。

DefaultSceneRootをStaticMeshで新規ルートとして適応します。

 

名前はItemMeshとしました。

 

仮メッシュを適応してSimulatePhysicsにチェックを入れます。

 

コリジョンプリセットからPawnをOverrideにしました。

 

BP_ItemAmmo(子)の更新

追加していたStaticMeshのスケールを親のメッシュに適応します。

 

追加したStaticMeshコンポーネントは削除します。

 

浮かせた状態で実行して物理挙動で落下することを確認出来たら完成です。

 

 

ここから本編です。

①アクションマッピングの追加

射撃とADSアクションを設定しましょう。

以前と同じようにファイル→プロジェクト設定のエンジンインプットを選択します。

 

FireADSを追加しました。

 

 

BP_FirstPersonCharacterの編集

BP_FirstPersonCharacterのイベントグラフを開きます。

 

作成したアクションイベントを配置します。

 

③銃インベントリ用の変数を作成


持っている銃の情報を変数で持っておきましょう。

CacheItemから伸びている線を変数へ昇格から名前をInventoryWeaponsとします。

複数形にしたのは複数の銃を持つことができるようにするためです。

 

変数の詳細から配列にしておきましょう

 

アイテムを持てるかどうかのチェック用のマクロを作りましょう。

武器をインベントリに追加できるか?なのでCheckAddInventoryWeaponとしました。

 

インプットとアウトプットに画像の項目を追加します。

 

ノードを組みます。武器インベントリに追加されているアイテムがMaxSlot以下かどうかを判定し、この時点でアイテムを取得できるので配列にAddします。

配列の要素が1(武器を初めて手に入れた状態)では手に持つ。それ以外(すでに別の武器を持っている)状態ではインベントリへ送ります。

 

イベントグラフに戻りマクロを配置します。

MaxSlotは武器を何個持てるか?Grabの分岐でGrabインターフェースをインベントリ送るのでアイテムのインターフェース、Pickを呼びます。


④BP_GunBaseの編集

 

ActionPickのインターフェースにDestroyActorにつなげます。

 

実行してみましょう。

MaxSlot以上の武器を持つことができないはずです。

 

⑤銃用の変数を作成

射撃モードの列挙型EN_GunFireModeを作ります。

これは射撃したときの挙動です。

 

バースト・セミ・フルの3種類を作ります。

 

次に銃の情報をまとめた構造体ST_GunInfoを作ります。

 

要素とデフォルト値を設定します。

銃のアニメーションなど場合に応じて要素を追加しましょう。

 

・ADSできるか?

・ADSのカメラ位置

・ADS速度

・発射速度

・バースト間隔

・射撃モード

・マガジンの最大弾数

・一度に出る弾の数

・リコイルの強度

・腰うちの拡散率

・ADS時の拡散率

・射撃時の腕のモンタージュ

・リロード時の腕のモンタージュ

 

 

インターフェースBPI_GunActionのアウトプットに追加します。

 

BP_GunBaseにも変数として作成します。

 

⑥射撃の実装

 

元々あったBP_Rifleから移植します。

 

BP_GunBaseに移植(コピペ)します。

ProjectileOffsetは変数で作成しましょう。

 

プレイヤーのメッシュをアニメーションしているところがありエラーを出しています。

 

インターフェースGrabの引数がプレイヤーのメッシュを参照していたので使用します。

SceneComponentからSkeletalMeshComponentに変更します。

 

つなぎなおすだけでエラーは消えます。

 

BP_GunBaseを開きます。

変数に昇格してキャッシュします。


キャッシュしたものからつなぎます。

MontageはGunInfo構造体から接続します。

 

BPI_GunActionのFireにインプットPressedを追加します。

 

BP_GunBaseに射撃システムを構築します。

 

▼全体像

 

インターフェースから射撃イベントが呼ばれたら疑似Tickを行います。

 

射撃モードで分岐させ発射処理を呼びます。

 

射撃モードの応じて発射間隔を遅延ノードで接続します。

 

一度に出る弾の量を調整します。

 

子であるBP_Gun_Spongeを開きます。

ST_GunInfoの変数を作成してパラメータを調整しオーバーライドします。

 

BP_FirstPersonCharacterを開きます。

射撃を行うノードを組みます。

 

最後に弾ブループリントのBP_FirstPersonProjectileのコリジョンから弾同士のオーバーライドをできるようにします。

 

これで完成です!

ブループリントを複製してパラメータや色などバリエーションをいろいろ試してみましょう。

 

最後に

UE4やUE5向けの記事を書いています。

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。