【UEFN】Popup Dialog Device (ポップアップダイアログの仕掛け) の使い方|Verseで選択肢による分岐を実装する手順
こんにちは、UEクリエイターズです。今回もUEFN(Unreal Editor for Fortnite)の使い方について解説していきます。
この記事では、Popup Dialog Device(ポップアップダイアログの仕掛け)の使い方とVerseによる制御方法について具体的に説明していきます。
動画でも解説しているので参考にしてみてください。
概要

Popup Dialog Device(ポップアップダイアログの仕掛け)を使用すると、プレイヤーの画面(HUD)に選択肢付きのダイアログを表示させることができます。

単にテキストを表示するだけでなく、プレイヤーがどのボタンを選択したかという情報をVerseで取得できるため、クエストの受注確認、ショップの購入確認、ストーリーの分岐といった高度なゲームロジックの実装に欠かせない仕掛けです。


今回は、ボタンデバイスの起動をきっかけにダイアログを表示し、選択結果に応じてログを出力するまでの流れを解説します。
実演環境:Unreal Editor 5.8(2026年1月時点)
デバイスの配置と基本設定
実装には、きっかけとなる Button Device(ボタンの仕掛け)と、表示用の Popup Dialog Device(ポップアップダイアログの仕掛け)の2点が必要です。
Button Device(ボタンの仕掛け)の設定
- Interaction Radius(インタラクション半径): 必要に応じて調整(例:0.5)し、反応範囲を最適化します。

Popup Dialog Device(ポップアップダイアログの仕掛け)の設定

詳細パネルのオプションを以下のように設定します。
| プロパティ名 | 設定内容 | 説明 |
| Title(タイトル) | 任意のテキスト | ダイアログの最上部に大きく表示される見出し。 |
| Response Type(レスポンスタイプ) | 2 Buttons | 表示するボタンの数(最大10個程度まで拡張可能)。 |
| Button 1 Text(ボタン1テキスト) | OK | インデックス番号 0 に対応するボタン名。 |
| Button 2 Text(ボタン2テキスト) | Cancel | インデックス番号 1 に対応するボタン名。 |
Verseによる制御・実装
Verseを使用して、ボタンのインタラクト・イベントからダイアログの表示、そして選択結果の判定までを制御します。
実装コード
# ----------------------------------------------
# Documentation: https://uecreators.com/popup-dialog-verse
# ----------------------------------------------
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# プレイヤーに選択肢(OK/Cancel)を提示するデバイス
popup_dialog_manager := class(creative_device):
# 1. ポップアップダイアログ
# エディタで「ボタン1:OK」「ボタン2:Cancel」と設定しておきます
@editable
QuestDialog : popup_dialog_device = popup_dialog_device{}
# 2. きっかけとなるボタン
@editable
TalkButton : button_device = button_device{}
# ゲーム開始時の処理
OnBegin<override>()<suspends>:void=
# 会話ボタンが押されたら、ダイアログを表示
TalkButton.InteractedWithEvent.Subscribe(ShowDialog)
# ダイアログのボタンが押された(返事があった)時のイベント登録
QuestDialog.RespondingButtonEvent.Subscribe(OnDialogResponded)
# ダイアログを表示する
ShowDialog(Agent:agent):void=
# 特定のプレイヤーにだけ表示する
QuestDialog.Show(Agent)
# プレイヤーが「OK」か「Cancel」を選んだ時の処理
# 引数は Tuple(誰が, 何番のボタンか) で送られてきます
OnDialogResponded(Result : tuple(agent, int)):void=
Agent := Result(0) # 誰が
ButtonIndex := Result(1) # 何番のボタンを押したか (0, 1, 2...)
# エディタのボタン設定順序によって番号が決まります
# 今回は「ボタン1(Index 0)」を「OK」と想定します
if (ButtonIndex = 0):
Print("クエストを受注しました!")
# ここにアイテムをあげる処理などを追加できます
else:
Print("クエストを断りました。")
コードのポイント解説
- 特定のプレイヤーへの表示:
Show(Agent)メソッドにエージェント情報を渡すことで、マルチプレイ環境においてボタンを押したプレイヤーの画面にのみダイアログを表示させることができます。 - RespondingButtonEventとタプル: ダイアログの応答イベントは
tuple(agent, int)形式でデータを返します。- Index 0: 応答したプレイヤー(agent)。
- Index 1: 押されたボタンのインデックス(int)。仕掛けの設定順に
0, 1, 2...と割り振られます。
- if/elseによる分岐:
ButtonIndexを判定することで、プレイヤーの意思に基づいた異なるゲームロジック(アイテム付与、テレポート、ログ出力など)を実行可能です。
まとめ
Popup Dialog Deviceは、プレイヤーに「選択」という能動的なアクションを促す強力なツールです。今回紹介したVerseによる制御をマスターすれば、より没入感の高いシミュレーションや謎解きゲームを構築できます。
まずは2択のシンプルな構成から始め、慣れてきたら 3 Buttons 以上の多段分岐にも挑戦してみてください。
作成したVerseデバイスをビューポートに配置し、詳細パネルから各デバイスを紐付ける(@editableの接続)のを忘れないようにしましょう。
関連資料
動画版はこちら:https://youtu.be/BTpoe7yLadQ


