アルゴンUE4/UE5&アプリ開発日記

UE4/UE5の機能やプラグインを紹介します。初心者や中級者向けになってます!!

【UE4】DataAssetを応用した武器の取得と捨てる動作

DataAssetで武器を拾ってみよう!

今回はDataAssetの使い方を学ぶべく

DataAssetの情報を応用して武器の取得と捨てるのをやります!

そもそもDataAssetがどういったものかよく分かっていない方は、

こちらの初心者向け情報を記載したのでこちらもご確認いただければと

UE4.27で作成しています。
※サードパーソンテンプレートを使用しています。

※やり方などを紹介していますがこれが完璧な仕組みだ!
 というわけではないので参考程度に見ていただければ幸いです。

実際に作成したものはこちらになります。

各種素材やモデル情報について

モデルについては下記のマケプレを使用しています。

UE4.27には対応していないので過去バージョンのプロジェクトに入れた後、

 プロジェクトをアップデートして移行して使用してます。

武器を拾うインプットの設定

武器を拾うためのアクション用インプットがないので、

まずはプロジェクト設定のインプットからアクションを設定します。

今回はTキーでピックアップして、Yキーでドロップします。

プロジェクト設定のアクションの追加

・目次に戻る

拾う処理と武器BPの作成

実際に拾う処理を作成していきます。

まずは拾うアニメーションをキャラクターの操作に入れていきます。

今回もAnimationBPから設定します。

下記リンクの「アニメグラフの編集とアニメーションBP編集」と同じ設定をしてます。

続いて武器のBPですがDataAsset用のBPとDataAssetを作成します。

今回はこんな感じで設定しています。

DataAsset用のBP変数設定

実際に設定したDataAssetは以下になります。

※各パラメーターは武器を拾ったり捨てたりするタイミングで使用します。

DataAssetの動き

設定が完了したら武器用のBPを作成します。

コンポーネントはSkeletalMeshとBoxCollisionを用意します。

その他に関数を一つ用意されていますがこちらは、

武器を装備する際に武器モデルに物理処理を消すSetPhysicsOffを作成してます。

変数としては以下を用意しています。

WeaponCollision → 武器を拾える範囲のコリジョン

WeaponMesh → 武器のモデル

BP_GunParam → DataAsset用の情報BP

Character → 武器をアタッチするThirdPersonCharacterBP

武器BPの各種変数設定

下記はBeginPlay時の処理になります。

〇処理の流れについて〇

1.武器を拾える範囲を指定

2.武器のモデルをセット

3.物理を機能させるかのフラグをセット

武器BPの作成

下記は実際にキャラクターが武器を拾う処理になります。

〇処理の流れについて〇

1.BeginOverlapしたのがキャラクターの場合武器を拾うアクションを許可する。

※逆にその範囲内に入っていない場合はEnableInputをOFFにして入力を受けない。

2.もし許可されている場合はキャラクターのほうで用意されている装備処理を行う。

武器を拾う場合の処理

武器を拾う際に武器の物理を消す関数を用意しています。

〇処理の流れについて〇

1.武器を拾える範囲のコリジョンを削除する。

2.SimulatePhysicsをOFFにしてCollisionEnableをNocollisionに変更する。

武器を拾った際の各種コリジョンや物理のOFF

武器側の処理のプログラムはこちらで完了です。

今度は拾う側のキャラクター側の処理を行います。

キャラクターのほうでも変数とマクロを設定しています。

◆作成したマクロ◆

GetDropLocation → 武器を落とす位置情報を生成するマクロ

NextEquip → 次に装備する武器の情報を生成するマクロ

◆作成した変数◆

EquipWeapon → どの系統の武器を装備しているかチェックしているフラグ配列変数

EquipWeaponModel → 武器のモデルを整数値をキーにしたマップ変数

WeponWidget → 武器情報が載ってるUMG

isPickup? → 拾っているアニメーションのON.OFFフラグ

EquipWeaponType → どのタイプの武器しているか保持する変数

キャラクター側の変数とマクロ

最初の処理としてUMG用の変数WeponWidgetをBeginPlayで設置します。

Viewに追加する処理

武器を拾う処理ですが少し長いので画像を2つにしてます。

〇処理の流れについて〇

1.武器を持っているかEquipWeaponフラグの配列からチェック。

2.持ってなければフラグをONにして拾うアニメーションを実施。

3.先ほど紹介した武器の物理を削除する関数(SetPhysicsOFF)を呼び出して物理OFF

キャラクターが武器を拾うための処理1

4.装備するモデルをEquipWeaponModelに保持するため追加する。

5.武器表示のUMGを更新してキャラクターのソケットにアタッチする。

※アタッチするソケット名は武器のAssetDataのEquipSocketと同じにします。

※UMGの関数の説明は「拾った後のUMGの変更と武器を捨てる処理」で説明します。

武器を拾って装備するための処理2

ソケットについてはThirdPersonCharacterのボーンに設定します。

各種武器をアタッチするためのソケット処理

以上が武器を拾ったときの処理の流れになります。

・目次に戻る

拾った後のUMGの変更と武器を捨てる処理

続いてUMGの処理になります。

今回はVerticalBoxに武器名・武器画像・武器の弾数を縦に表示する形で作成してます。

UMGのデザイン

処理としてはカスタムイベントを作成して各パーツの情報をセットします。

※武器を拾った際の処理(DataAssetの武器情報をセット)

武器を拾った際のUMGの変更処理

※武器を捨てた際の処理(武器を装備してるか確認してDataAssetの武器情報をセット)

武器を捨てるUIの処理

UMGの説明も完了したので実際にあれをする時間になります。

〇処理の流れについて〇

1.武器を持っているかEquipWeaponフラグとモデル情報をチェック

2.持っている場合はEquipWeaponフラグをOFFにして、Dettachでモデルを削除

どの武器をドロップするかの処理

3.削除した武器のタイプを元に武器をSpawnする(これが落としたモデルになる。)

※GetDropLocationマクロで位置を指定しています。

4.NextEquipマクロで次に装備するための武器を選択します。

落とした武器を出現させる処理

最後にGetDropLocationのマクロとNextEquipのマクロについて説明します。

GetDropLocationは向いている方向と自分の位置を計算したその位置を返しています。

武器をSpawnする位置情報生成マクロ

NextEquipはForEachLoopでどの武器を持っているかチェックして、

次にセットする武器を配列のインデックスで指定しています。

次の武器を選択するマクロ

以上がDataAssetを用いた武器の取得と捨てる動作の実装でした。

・目次に戻る

最後に

DataAsset応用編は以上になります。

20分ぐらいで考えたロジックなので穴とか拡張性ほぼ皆無ですが、

まあ私ならこうするとかあってもいいのかなと思ったので書きました!

・目次に戻る