[Unreal Engine 5]Tile viewを使って複数項目選択画面を作る

Unreal Engine 5

シンプルなタワーディフェンスゲームを作る part14

こちらのようなシンプルなタワーディフェンスゲームを作っています。本記事では、下の動画のような形で「タワーソケット」をクリックすると複数の「砲台タワー」の候補から建設したいタワーを選択できるUIを作ります。本記事ではUIの表示のみを行い、UIに表示されるボタンを押してタワーを建設する機能は次回作成します。

基本設計

下図のような関係を持った部品を使ってタワー建設UIを作ります。

ウィジェットを複数配置することのできる「Tile view」というウィジェットを持った「タワー建設UI」が、建設することのできるタワーの情報を持ったデータテーブル「タワー情報テーブル」を参照して、各タワーに対応する「タワー建設ボタン」を複数配置します。

タワーのバリエーションを増やす

まだタワーが1種類しかないため、まずはタワーのバリエーションを増やします。

「tower」フォルダを開き右クリック→「ブループリントクラス」で「BP_tower」を継承したブループリントを2つ作ります。作った2つのブループリントは「BP_tower1」「BP_tower2」という名称にします。

タワー1は安価で弱いタワーとします。「BP_tower1」を開きます。
「BP_tower1(self)」を選択した状態で「デフォルト」/「attack range」を500に設定します。

タワー2は高価で強いタワーとします。「BP_tower2」を開きます。
「BP_tower2(self)」を選択した状態で詳細パネルの
「デフォルト」/「fire_rate」を1
「デフォルト」/「attack_power」を30
「デフォルト」/「cost」を200
に設定します。
「SM_tower_base」を選択した状態で詳細パネルの
「マテリアル」/「エレメント0」を「M_headquater」に変更します。

ボタンに表示するタワー情報を持つデータテーブルを作る

まず、タワー情報を表す構造体を作ります。

「tower_socket」フォルダを開きます。「タワー建設UI」関連の部品はここに入れていきます。
右クリック→「ブループリント」→「構造体」を選択して作成、名称を「ST_tower_info」とします。

「ST_tower_info」を開きます。
左上の「変数を追加」から変数を3つ追加してそれぞれ以下のように作成します。

  • Name型「tower_name」:ボタンに表示するタワーの名称
  • BP_tower型「tower_class」:建設するタワーのクラス
  • Texture 2D型「tower_image」:ボタンに表示するタワーの画像

タワーの画像を用意します。
各タワーの外観をスクリーンショット(win+shift+s)で取得して画像として保存し、その画像をインポートします。
今回は「tower_socket」フォルダの下に「images」フォルダを作成してそこにインポートしました。

ボタンに表示するタワー情報を持つデータテーブルを作ります。

「tower_socket」フォルダに戻り、右クリック→「その他」→「データテーブル」を選択して作成し、「行構造を選択」で先ほど作成した「ST_tower_info」を選択します。
作成したデータテーブルの名称を「DT_tower_info」とします。
「DT_tower_info」を開いて以下の行を追加します。

  • 1行目:tower_name = タワー1, tower_class = BP_tower1, tower_image = タワー1の画像
  • 2行目:tower_name = タワー2, tower_class = BP_tower2, tower_image = タワー2の画像

Tile viewを使ったタワー建設UIを作る

タワー建設UIを作る部品として、Widget型ブループリントを2つ、Object型ブループリントを一つ作ります。Widget型の方を「WBP_tower_construct_ui」と「WBP_tower_select_entry」という名称にし、Object型の方を「BP_tower_select_entry」という名称にします。
それぞれの役割は以下です。

  • 「WBP_tower_construct_ui」:「WBP_tower_select_entry」を複数並べて表示する
  • 「WBP_tower_select_entry」:タワーを建設するボタン
  • 「BP_tower_select_entry」:「WBP_tower_select_entry」を作るときにデータのやり取りをする

「BP_tower_select_entry」を開きます。
「ST_tower_info」型の変数を追加​し、名称を「tower_info」とします。
「tower_info」の「インスタンス編集可能」​「スポーン時に公開」にチェックを付けます。

「WBP_tower_select_entry」を開きます。
「Canvas Panel」を追加​します。
「image」を追加して名称を「tower_image」に​します。
「text」を追加して名称を「tower_name」に​します。
「button」を追加して名称を「button_make_tower」に​します。
「tower_image」「tower_name」「button_make_tower」​の「is Variable」にチェック​し、中央に来るよう位置を調整し、​大きさは250とします。
加えて「button_make_tower」の​Style/Normal/Tintの​アルファ値を0に​、Style/Hovered/Tintの​アルファ値を0.5に​しておきます。

「WBP_tower_select_entry」のイベントグラフに移動します。
「クラス設定」を押下​し、左下の詳細パネルの「実装インターフェース」「追加」から​「UserObjectListEntry」を選択​します。すると、マイブループリント/インターフェースに項目が追加されます。

「On List Item Object Set」を右クリック→「イベントを実装」​します。
すると「Event On List Item Object Set」がイベントグラフに追加されます。

「Event On List Item Object Set」の続きを以下のように作ります。
「Event On List Item Object Set」の入力を引数として「Cast to BP_tower_select_entry」​を追加し、「get tower_info」「Break ST_tower_info」​と繋げます。
変数「tower_image」ドラッグアンドドロップし、そこから線を引き出して「Set Brush from Texture」​を追加し、「Target」は変数「tower_image」​、「Texture」は「Break ST_tower_info」の「tower_image」を繋げます。
「tower_name」をドラッグアンドドロップし、そこから線を引き出して「Set Text(Text)」​を追加し、「Target」は変数「tower_name」​、「In Text」は「Break ST_tower_info」の「tower_name」を繋げます。このとき「To Text」は自動的に追加されます。

「WBP_tower_construct_ui」を開きます。

「Canvas Panel」を追加​します。
「Tile View」を追加して名称を「tile_view_tower」に​します。
「tile_view_tower」の「is Variable」にチェック​を付けます。
詳細パネルの「リストエントリー​」/「Entry Widget Class」に「WBP_tower_select_entry」を割り当てます。「Entry Height」「Entry Width」を250に​しておきます。
コンパイルを押すと図のように「WBP_tower_select_entry」が並びます。

「WBP_tower_construct_ui」のイベントグラフに移動します。

「Event Construct」の続きを以下のように作ります。
「Get Data Table Row Names」​を追加し「Table」に「DT_tower_info」を選択します。
「For Each Loop」を追加します。
「Get Data Table Row」​を追加し「Table」に「DT_tower_info」を選択​します。
「Construct Object from Class」​を追加し「Class」に「BP_tower_select_entry」を選択​します。
変数から「tile_view_tower」をドラッグアンドドロップします。
「tile_view_tower」から線を引き出し「Add Item」​を追加します。

ここまでの実装により、「WBP_tower_construct_ui」を表示するとき、データテーブルから表示するタワー情報を読み込んでタワー建設ボタンを並べることが出来ます。

「WBP_tower_construct_ui」を表示できるようにします。

「BP_tower_socket」を開きます。(part8で作成)
「Add Custom Event」で新しいイベントを作成​し、名称を「show_construction_ui」に​します。
「show_construction_ui」の続きを以下ように作ります。
「Create Widget」​を追加して「Class」に「WBP_tower_construction_ui」を選択​します。
「Add to viewport」​を追加します。

「BP_tower_socket」の「Event BeginPlay」の方に移ります。

「On Clicked_Event」の後に「show_construction_ui」​を繋げます。元々繋げていた「spawn_tower」は削除​します。

ここまで実装してゲームを実行すると冒頭の動画のように、「tower_socket」をクリックするとタワー建設UIが表示されるようになります。
まだボタンを押しても何も起こりませんが、ボタンを押したらタワーが建設される機能は次回作成します。

コメント

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