ゲーム開発備忘録

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

【ゼロからアンリアルエンジン5】㉞ドラッグアンドドロップで動作するシンプルなインベントリを作成しよう=アイテムの表示と移動=

目次

 

はじめに

注意

UE5.0.0の現在の情報です。

今後のアップデートによりUIや機能が変更される可能性があることをあらかじめご理解ください。

 

f:id:namiton:20220418154247p:plain



 

この記事を作成するにあたり以下の内容を参考にさせていただきました。

[UE4] ドラッグドロップで操作できるアイコンの作り方|株式会社ヒストリア

 

Unreal Engine でドラッグ アンド ドロップの UI を作成する | Unreal Engine ドキュメント

 

解説

①アイテム用の構造体を作成

アイテムの情報をやりやすくするためです。

構造体DS_ItenDataを作成します。

f:id:namiton:20220418134556p:plain

 

構造体の変数を追加します。

f:id:namiton:20220418134913p:plain

デフォルト値もセットしておきます。

f:id:namiton:20220418135016p:plain

 

②アイテム用のUIを作る

ユーザーウィジェットからWBP_Itemを作ります。

f:id:namiton:20220418132341p:plain

 

開いてフルスクリーンからCustomに変更して幅と高さを128にします。

f:id:namiton:20220418150901p:plain

 

③アイテムUIのコンポーネントの追加

SizeBoxを追加して

f:id:namiton:20220418132748p:plain

 

レイアウトを100、ビヘイビアのカーソルをHandにします。

f:id:namiton:20220418150922p:plain

f:id:namiton:20220418150932p:plain

 

オーバーレイを追加してその子に2つのimageとtextを追加します。

それぞれ名前をItemIcon,NameBack,NameTextにしてきましょう

f:id:namiton:20220418140733p:plain

 

 

ItemIconの詳細からalignmentを変更します。

f:id:namiton:20220418140150p:plain

 

NameBackはalignmentとTintとSize

f:id:namiton:20220418140824p:plain

 

NameTextはalignmentとFontSizeとJustification、

f:id:namiton:20220418141505p:plain

f:id:namiton:20220418141458p:plain

 

クリッピングを変更します。

f:id:namiton:20220418141028p:plain

 

こんな感じになったらOKです。

f:id:namiton:20220418151013p:plain



 

 

ItemIcon詳細からバインディング関数を作成します。

f:id:namiton:20220418134258p:plain

 

名前をGetItemIconに変更しましょう。

f:id:namiton:20220418134400p:plain

 

NameTextの詳細からバインディング関数Get Item Nameを作成します。

f:id:namiton:20220418141218p:plain

 

 

アイテム用に作成した構造体の変数を追加します。

f:id:namiton:20220418135256p:plain

 

スポーン時に公開とインスタンス編集可能にチェックを入れます。

f:id:namiton:20220418135309p:plain

 

それぞれの関数に接続します。

f:id:namiton:20220418135348p:plain

f:id:namiton:20220418141323p:plain

 

④アイテムUIのイベントの編集

 

イベントのオーバーライドからButtonDownとDragDetectedを追加します。

f:id:namiton:20220418133448p:plain

 

ButtonDownにはこのUIが任意のキーで押されたかどうかを設定します。

f:id:namiton:20220418133651p:plain

 

DragDetectedはドラックが開始されたときのイベントです。

ドラッグアンドドロップの動作を仲介するDragDropOperationを作成します。

f:id:namiton:20220418133626p:plain

 

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

このイベントはドロップ処理が失敗したときに呼ばれます。

f:id:namiton:20220418133902p:plain

 

⑤アイテムスロットUIの作成

ウィジェットブループリントUserWidgetからWBP_ItemSlotを作ります。

これはアイテムUIの受け皿です。

f:id:namiton:20220418141812p:plain

 

同じように設定します。

f:id:namiton:20220418150807p:plain

 

⑥アイテムスロットUIのコンポーネントの追加

Border、SizeBox、NamedSlotを追加します。

NamedSlotはItemSlotにリネームしておきましょう。

f:id:namiton:20220418142031p:plain

 

SizeBoxはPaddingとレイアウトを変更します。

f:id:namiton:20220418150800p:plain




こんな感じになればOKです。

f:id:namiton:20220418142311p:plain

 

⑦アイテムスロットUIのイベントの編集

 

イベントオーバーライドからOnDropを作成します。

OnDropはこのUIにドラッグアンドドロップされたときに呼ばれるイベントです。

f:id:namiton:20220418142455p:plain

 

Dropイベントを編集します。

OperationからはDragDropOperationの結果が返ってきます。

DragVisualはWBP_Itemのことです。

やっていることは非常にシンプルでこのウィジェットのItemSlotの子になにかある場合はドラッグされたアイテムの子と交換し、ない場合はそのまま配置しているだけです。

 

ここでのリターンノードでFalseになるとWBP_ItemのDragCancelledが呼ばれます。

f:id:namiton:20220418142841p:plain

f:id:namiton:20220418143041p:plain



⑧スケールボックスでラップする

 

ウィンドウのサイズによってUIが破綻するのを防ぐためスケールボックスでラップしましょう。

f:id:namiton:20220418145653p:plain

 

パレッドの詳細はコチラの記事で解説されています。

historia.co.jp

 

⑨Inventoryに配置

WBP_InventoryにUIを追加します。

 

こちらのサイトから素材を使用しました。

icon-rainbow.com

 

WBP_ItemSlotをドラッグして配置します。

(ここら辺はお好みで)

f:id:namiton:20220418154247p:plain

 

WBP_ItemSlotの子のItemSlotにWBP_Itemを配置します。

f:id:namiton:20220418150008p:plain

 

WBP_Itemの詳細から設定できます。

f:id:namiton:20220418144958p:plain

 

実行してみましょう。

こんな感じになったら成功です。

f:id:namiton:20220418153856p:plain

 

最後に

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

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

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

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