次のセクションでは、プレイヤーの UI にウィジェットを追加する方法とウィジェットを削除する方法を説明します。
これらの例ではテキスト ブロック ウィジェットを使用していますが、任意の種類のウィジェットから行うことができます。 使用できる全てのウィジェットのタイプについては、「ウィジェット タイプ」を参照してください。
ウィジェットを追加する
この例では、レベル内でプレイヤーがボタンの仕掛けとやり取りする際にウィジェットを追加する方法を示します。
Verse の仕掛けを新しく作成し、これをレベルに追加します。 Verse で新しい仕掛けを作成する方法については、「Verse を使用して独自の仕掛けを作成する」を参照してください。
Verse Explorer を使用して、Visual Studio Code で Verse ファイルを開きます。
編集可能なボタンの仕掛けのプロパティを Verse の仕掛けに追加し、レベル内でボタンの仕掛けへの参照を設定します。 編集可能なプロパティの作成方法については、「仕掛けのプロパティをカスタマイズする」を参照してください。
# ボタンの仕掛けをエディタ内で設定して、レベル内でその仕掛けを参照するようにします @editable MyButton : button_device = button_device{}Verse ファイルの冒頭に次の行を追加して、Verse UI API を使用できるようにします。
using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath}この UI はプレイヤーごとであるため、プレイヤーの UI にアクセスするには、そのプレイヤーへの参照が必要になります。 この例で、プレイヤーがボタンとやり取りする際にカスタム仕様の UI を表示する方法をお見せしているのは、仕掛けのイベントには、仕掛けとやり取りするプレイヤーへの参照が含まれるためです。 イベント サブスクリプションの設定方法については、「仕掛けのインタラクションをコード化する」を参照してください。
# 実行中のゲームで仕掛けが開始されたときに実行します OnBegin<override>()<suspends>:void= MyButton.InteractedWithEvent.Subscribe(HandleButtonInteraction) # カスタム仕様の UI は特定のプレイヤーのみに関連付けることができ、そのプレイヤーのみが表示できます HandleButtonInteraction(Agent : agent) : void = # UI を表示します次に、失敗する可能性がある関数
GetPlayerUI[]を if 式内で呼び出して、そのプレイヤーの UI への参照を取得します。Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): # Display UIプレイヤーの UI への参照を使用して
AddWidget()を呼び出し、ウィジェットを追加できます。localizes指定子を持つ「TextForMyUI」という名前のメッセージを作成し、文字列"Hello, world!"で初期化します。hello_world_device := class(creative_device): # ボタンの仕掛けをエディタ内で設定して、レベル内でその仕掛けを参照するようにします @editable MyButton : button_device = button_device{} # UI にテキストとして表示するローカライズ可能なメッセージ TextForMyUI<localizes> : message = "Hello, world!"
message型はテキストをローカライズできることを意味し、message変数の初期化に使用する文字列は、メッセージのデフォルトのテキストと言語です。Message型の詳細については、「Verse 言語クイック リファレンス」を参照してください。次に、デフォルト テキストとして
TextForMyUIでテキスト ウィジェットを作成し、プレイヤーの UI に追加します。Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): MyUI : text_block = text_block{DefaultText := TextFOrMyUI} PlayerUI.AddWidget(MyUI)
全体的なコードは次のとおりです。
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath} hello_world_device := class(creative_device): # Set the Button device in the Editor to reference the device in the level @editableVerse ファイルを保存し、UEFN のメインメニューから [Verse] > [Build Verse Code (Verse コードをビルド)] の順にクリックし、Verse の仕掛けを更新します。
この Verse の仕掛けを使ってレベルをプレイテストすると、プレイヤーがボタンの仕掛けとやり取りした際に、画面左上隅に「Hello, world!」というテキストが表示されます。
ウィジェットを削除する
この例では、プレイヤーがボタンの仕掛けと再びやり取りする際に、プレイヤーの画面から UI を削除する方法を示します。
先述の「ウィジェットを追加する」で作成した Verse ファイルを開きます。
プレイヤーがボタンと再びやり取りした際にウィジェットを削除できるようにするには、そのウィジェットを変数に格納して後で参照できるようにする必要があります。 ウィジェットはプレイヤーごとに表示されるため、ウィジェットを格納して、それを表示しているプレイヤーに関連付ける必要があります。こうすることで、適切なウィジェットを適切なプレイヤーに提供することができます。
マップ内で
playerをキーとして使用し、任意のテキスト ブロックをウィジェットの値として使用するマップ変数を作成し、「MaybeMyUIPerPlayer」と名前を付けます。 (この例ではテキスト ブロック ウィジェットを使用していますが、あらゆるウィジェットを使用できます。)var MaybeMyUIPerPlayer : [player]?text_block = map{}このウィジェットをプレイヤーの UI に追加する際に
MaybeMyUIPerPlayer変数内に格納して、後で画面から削除できるようにします。 マップ内の要素へのアクセスは失敗する可能性がある式であるため、プレイヤーに関連するウィジェットの値の設定は、if式のような失敗コンテキストで呼び出す必要があります。Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): NewUI := text_block{DefaultText := TextForMyUI} PlayerUI.AddWidget(NewUI) if (set MaybeMyUIPerPlayer[InPlayer] = option{NewUI}) {}次に関数を更新し、プレイヤーに対してウィジェットが表示されているかどうかを
MaybeMyUIPerPlayerで確認できるようにします。 表示されていれば、そのウィジェットを削除します。 表示されていない場合は、プレイヤー向けに新しいウィジェットを作成します。Verse# A custom UI can only be associated with a specific player, and only that player can see it HandleButtonInteraction(Agent : agent) : void = # Agents can be a player or AI, but you can only get the UI of a player # so you must cast the Agent, who interacted with the Button device, to the player type if (InPlayer := player[Agent], PlayerUI := GetPlayerUI[InPlayer]): if (MyUI := MaybeMyUIPerPlayer[InPlayer]?): PlayerUI.RemoveWidget(MyUI) if (set MaybeMyUIPerPlayer[InPlayer] = false) {} else: NewUI := text_block{DefaultText := TextForMyUI}全体的なコードは次のとおりです。
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /UnrealEngine.com/Temporary/UI } using { /Fortnite.com/UI } using { /UnrealEngine.com/Temporary/SpatialMath} hello_world_device := class(creative_device): # Set the Button device in the Editor to reference the device in the level @editableVerse ファイルを保存し、UEFN のメインメニューから [Verse] > [Build Verse Code (Verse コードをビルド)] の順にクリックし、Verse の仕掛けを更新します。
この Verse の仕掛けを使ってレベルをプレイテストすると、プレイヤーが初めてボタンの仕掛けとやり取りした際に、画面左上隅に「Hello, world!」というテキストが表示されます。 このテキストは、プレイヤーがボタンの仕掛けと再びやり取りする際に画面から消えます。