このセクションでは、TMNT アーケード テンプレートのプレイヤー UI を再作成する手順に従って、ゲーム用に完全にカスタマイズされた UI オーバーレイを作成する方法を説明します。
手順の基本的な内訳は次のとおりです。
UI マテリアル ラボをダウンロードしてください。テクスチャ パックは無料でダウンロードできます。独自の UI 構成を試してみてください。
画像をクリックすると拡大します。
というわけで、早速見ていきましょう!
カスタム ウィジェットを設定する
コンテンツ ブラウザで、[All (全て)] > [自分のプロジェクト名] > UI > [Widgets (ウィジェット)] を選択して、UW_HUD_PlayerInfoBlock ウィジェットのブループリントを開きます。
左側には、[Hierarchy (階層)] タブが表示されます。これは、メイン エディタ ウィンドウのアウトライナーと同じように機能し、完成したウィジェットのさまざまなコンポーネントを表示します。
バックプレート
UI のレイヤー化されたルックを定義する 3 つのバックプレート イメージで構成されています。 以下のようなものが含まれます。
Backplate1_Image - グレーがかった背景レイヤー
Backplate2_Image - オレンジのアウトライン レイヤー
Backplate3_Image - 白いアウトライン レイヤー
これらの画像は組み合わさって、プレイヤー情報パネルのフレーム付きスタイルを作り出します。
プレイヤー名
このコンポーネントは、アクティブ プレイヤー名と非アクティブ プレイヤー名という 2 つの要素で構成されており、ゲーム内でプレイヤーが生きているとき、排除されたとき、または切断されたときに表示されます。
チーム内で現在アクティブなメンバーと、排除されたメンバーをプレイヤーにわかるようにするため、2 つの異なる色を選択します。
アクティブなプレイヤー名の場合は、[Visibility (可視性)] を [Visible (表示)] に設定し、非アクティブな場合は、[Hidden (非表示)] に設定します。 これは特定の条件下でのみ表示されます。
長いプレイヤー名がプレイヤーのアバター アイコンと重ならないように、[Width Override (幅のオーバーライド)] を「220.0」に設定します。
プレイヤー アバター アイコン
このコンポーネントは、ゲーム内で選択したスキンに基づいてプレイヤーのキャラクター ポートレートを表示します。
コンポーネントは、「UI」 > 「Material Instances」フォルダにある「MI_UI_PlayerCard」というマテリアル インスタンスにバインドされています。
[Details (詳細)] パネルの設定を変更することで、このマテリアル インスタンスを好みに合わせてカスタマイズできます。 独自の画像をインポートし、アウトラインの色を追加してみてください。
この例では、後でキャラクターのスキンに接続される空の透明な画像が選択されています。
体力
このコンポーネントには、プレイヤーの体力とシールド レベルを表示する領域が含まれています。
親レベルでは、許容される領域全体の大きさを決定するサイズ ボックスが表示されます。
次は、「MI_UI_Health_Backplate」と呼ばれるヘルス バックプレート イメージです。 この UI マテリアルは、[Fortnite] > [UI] > [Materials] でも提供されています。 非常にカスタマイズ性が高く、プレイヤーの体力ゲージを表示する際のオプションが多く用意されている上、すぐに利用可能です。
バックプレートの上には、体力ゲージと、それぞれ「Health_Image」と「Health_Shadow」と呼ばれるシャドウの 2 つのコンポーネントで構成されたスタック ボックスがあります。
Health_Image はカスタマイズ可能な進行状況バーの UI マテリアルです。 マテリアル インスタンスを開くと、[Preview Size (プレビューサイズ)] を変更して拡大できます。
ここでは、[Details (詳細)] パネルの設定をいくつか変更して、既存のマテリアルにどのような影響があるか確認します。
Health_Shadow バーは、美観目的で追加されたシンプルな陰影付きオーバーレイです。
盾
シールド コンポーネントは、空のシールド領域を濃い灰色で表示する Shields_Container の背景と、進行状況バーの UI マテリアルを含む Shields_Image で構成されます。
Shield_Image は、Health_Image マテリアルの簡略化されたバージョンである基本的な進行状況バー マテリアル インスタンスを使用します。
バインディング表示を追加する
これでゲームの UI のコア コンポーネントをビルドできました。次は、ライブ セッションから受信したデータに基づいて各コンポーネントを更新できるようにするバインディング表示を追加する練習をしてみます。
プレイヤー名
プレイヤー名を正しいフィールドに表示するには、次の手順に従います。
[Window (ウィンドウ)]> [View Bindings (バインディングを表示)] をクリックするか、画面の下部にある [View Bindings] を選択してドッキングし、[View Bindings] タブを開きます。
バインディング表示の HUDPlayerInfoViewModel リストを表示するには、下記を実行します。
1. [Window] > [Viewmodels (ビューモデル)] を選択して、[Viewmodels] ウィンドウを開きます。
1. [+Viewmodel] に移動し、[HUD - Player Info Viewmodel Base (HUD - プレイヤー情報ビューモデル ベース)] を選択します。
1. [Device - HUD Controller Player Info Viewmodel (デバイス - HUD 制御プレイヤー情報ビューモデル)] をクリックし、[Select (選択)] をクリックします。
Hierarchy リストから NameActive_Text を選択するか、UI プレビュー画面の [Playername] 領域をクリックします。
[+ Add Widget NameActive_Text] をクリックし、ドロップダウン メニューから [Text (テキスト)] を選択します。
右側の空のフィールドで、HUDPlayerInfoViewmodel を選択し、次のドロップダウンから [Player Name] を選択します。
最終的なバインディングは次のようになります。
NameInactive_Text 要素に対して手順 1~3 を繰り返します。
非アクティブな名前の表示設定を変更するには、NameInactive_Text に新しいウィジェットを追加し、ドロップダウンから [Visibility] を選択します。
右側の空のフィールドをクリックし、[Conversion Functions (変換関数)] > [To Visibility (Boolean)] を選択します。
このオプションを選択すると、3 つの新しいフィールドがポップアップ表示されます。 [Is Visible] の横にある [Link (リンク)] アイコンをクリックします。 メニューから、[HUDPlayerInfoViewModel] と [Is Eliminated] を選択します。
以下で、[True Visibility (真の可視性)] を [Not Hit-Testable (Self Only (ヒットテスト不可 (セルフのみ))] に設定します。 [False Visibility (False の可視性)] は [Collapsed] のままにします。 これにより、プレイヤーが撃破されたり切断されたりすると、名前が NameActive_Text に置き換わりますが、プレイヤーが生きている場合は折りたたまれたままになります。
最終的な NameInactive_Text バインディングは次のようになります。
[Compile (コンパイル)] を押して変更を送信すると、プレイヤー名の作成は完了です。
プレイヤー アバター アイコン
階層から Profile_Image を選択するか、UI プレビュー画面のプレイヤー アイコン領域をクリックします。
[+ Add Widget Profile_Image] をクリックします。
[Profile_Image] > [Brush (ブラシ)] に移動して、[Select] を押します。 このバインディングは基本的に、Profile_Image 詳細パネルから選択されたブラシ設定を参照します。
右側の空のフィールド内をクリックし、[Conversion Functions] > [Set Texture Parameter (テクスチャパラメータを設定)] を選択します。
[Parameter Name (パラメータ名)] フィールドに「Texture」と入力します。 このフィールドの名前を見つけるには、プレイヤーのアバター マテリアル インスタンスを開きます。
Set Vector/Scalar/Texture Parameter 関数の場合、マテリアル インスタンス パラメータ名が [Parameter Name] フィールドと完全に一致していることを確認してください。
[Value (値)] フィールドの横にあるリンク アイコンをクリックし、HUDPlayerInfoViewModel > [Player Avatar Icon] を選択します。
最終的なバインディングは次のようになります。
体力とシールド
階層から Health_Image を選択するか、UI プレビュー画面のヘルス バー領域をクリックします。
[+ Add Widget Health_Image] をクリックします。
[Profile_Image] > [Brush (ブラシ)] に移動して、[Select] を押します。
右側の空のフィールド内をクリックし、[Conversion Functions] > [Set Scalar Parameter (スカラーパラメータを設定)] を選択します。
[Parameter Name (パラメータ名)] フィールドに「Progress」と入力します。 このフィールドの名前を見つけるには、プレイヤーのアバター マテリアル インスタンスを開きます。
[Value] の横にある [Link (リンク)] アイコンをクリックし、[HUDPlayerInfoViewModel] > [Health (体力)] を選択します。
進行状況はプレイヤーの残りの体力のパーセンテージで示され、Multiplier は 0.1 に設定されているため、パーセンテージ ポイントごとに進行状況バーが 1/100 ずつ変化します。 これをテストするには、マテリアル インスタンスのパーセンテージ値を任意に変更して、進行状況バーの動きを確認してください。
画像をクリックすると拡大します。
最終的なバインディングは次のようになります。
シールド バーについては、手順 1 ~ 6 を繰り返しますが、ここでは [Health] ではなく [Shield (シールド)] を選択します。
シールドの最終的なバインディングは次のようになります。
変更を送信するには、[Compile] を押します。
フル ウィジェット
このバインディングを使用すると、プレイヤーがゲームに接続された後にのみウィジェット全体が表示されるようになります。
[Hierarchy] から PlayerInfoBlock_Overlay を選択します。
[+ Add Widget PlayerInfoBlock_Overlay] を選択し、ドロップダウン メニューから [Visibility] を選択します。
右側の空のフィールドをクリックし、[Conversion Functions (変換関数)] > [To Visibility (Boolean)] を選択します。 このオプションを選択すると、3 つの新しいフィールドがポップアップ表示されます。
[Is Visible] の横にある [Link (リンク)] アイコンをクリックします。 メニューから、[HUDPlayerInfoViewModel] と [Is Disconnected] を選択します。
[True Visibility] を [Collapsed] に、[False Visibility] を [Not Hit-Testable (Self Only)] に設定します。
最終的なバインディングは次のようになります。 変更を保存するには、[Compile (コンパイル)] を押します。
これで、ゲーム内情報を表示する UI ウィジェットが完全にセットアップされました。
プレイヤー スタックを作成する
このセクションでは、制御しているプレイヤーとともに追加のチーム プレイヤーを表示するユーザー ウィジェットを作成する方法を説明します。
まず、コンテンツ ブラウザを右クリックし、[User Interface (ユーザーインターフェース)] > [Widget Blueprint (ウィジェット ブループリント)] を選択して、新しいウィジェット ブループリントを作成します。
ダイアログ ボックスから [User Widget (ユーザーウィジェット)] を選択し、名前を「HUDInfoStack」に変更します。
ユーザー ウィジェットをダブルクリックして、新しいエディタ ウィンドウを開きます。
開始するには、[Palette (パレット)] パネルから Overlay (オーバーレイ) 要素を [Hierarchy] パネルにドラッグします。
スタック ボックスをオーバーレイの下のレベルにドラッグし、名前を「PlayerInfoStack」に変更します。
[Viewmodels (ビューモデル)] パネルから、[+Viewmodel] を押して、[Device - HUD Controller Team/Squad Player Info List] を選択します。
[Details] パネルに移動し、[+Add Viewmodel Extension] を押します。 これにより、PlayerInfoStack は Entry Widget クラスを受け入れられるようになります。
これらのオプションが表示されない場合は、ウィジェットをもう一度コンパイルしてみてください。
エントリ ウィジェット クラスでは、以前に作成した PlayerInfoBlock を選択します。 以下では、Entry Viewmodel として HUDPlayerInfoViewmodel を選択します。
[Slot Template (スロット テンプレート)] セクションでは、各ウィジェット間の間隔と配置を調整し、特定の数のウィジェットがゲーム内でどのように表示されるかをプレビューできます。
ウィジェット間の間隔gif をクリックすると拡大します。
[View Bindings] パネルで、[+Add Widget] をクリックし、HUDInfoStack を選択します。 PlayerInfoStack_Viewmodel_Extension を選択し、展開して Set Items を表示し、それをクリックします。 リストに PlayerInfoStack_Viewmodel_Extension が表示されない場合は、[Compile (コンパイル)] を押すと表示されるはずです。
右側の空のフィールドで、HUDPlayerInfoListViewModel > [Team/Squad Players Info Array] を選択します。 これにより Set Items という関数を使用して、新しくセットアップされた拡張機能にプレイヤー情報のビューモデルの配列が渡されます。
変更を保存するには、[Compile (コンパイル)] を押します。 これで、HUD 制御 の仕掛けを使用してこれらをゲームに追加する準備が整いました。
チームの残りのメンバーとは別に、コントロールしているプレイヤー用のウィジェットを作成する場合は、次の手順に従います。
制御プレイヤー用の新しいウィジェットを作成し、以前に Device - HUD Controller Player Info Viewmodel を使用していたのと同じようにバインディング表示を設定します。
このウィジェットを、スタック ボックスを保持する親ウィジェットの下に移動します。
そのウィジェットのバインディングを作成します。 左側のフィールドで、Device - HUD Controller Player Info Viewmodel を選択します。 右側のフィールドで、Device - HUD Controller Team/Squad Player Info List > Controlling Player Info を選択します。
HUD コントローラーの仕掛けを設定する
コンテンツ ブラウザで HUD Controller device を検索し、シーンにドラッグします。
ユーザー オプションで、プレイヤーに表示する内容を選択し、[Show HUD (HUD の表示)] が [Yes (はい)] に設定され、[Show Team Info (チーム情報を表示)] が [No (いいえ)] に設定されていることを確認します。
[Player Info Widget Override (プレイヤー情報ウィジェット オーバーライド)] まで下にスクロールし、「HUDInfoStack」ウィジェットを空のフィールドにドラッグします。 これが、作成した元のウィジェットではなく、新しく作成されたスタック ウィジェットであることを確認してください。
[Save] をクリックします。
以上です。 これでゲームのプレイテスト時に新しい UI が表示されるようになりました。
次にプレイ
次は、横スクロール ゲームのカメラならびにコントロールの仕掛けの設定について説明します。