GGua 日本語リファレンスEnglishGitHub ↗
英語版が正式な参照です。内容に差異がある場合は、英語版を優先してください。
GUIDE / SEMANTIC UI TREE

ゲームUIを意味情報として公開する

Semantic UI Treeは、実行中ゲームのbutton、text、input fieldなどを、画像や座標ではなく「何のUIで、今どんな状態か」という情報として公開する仕組みです。テストやAIは、Start Game buttonを名前や役割で見つけ、操作し、その後の変化を確認できます。

Semantic UI Treeとは?

ゲームが描画した画面を画像解析するのではなく、UIの構造と意味を同じframeのsnapshotとして表します。たとえば「このnodeはStart Gameというbuttonで、表示中・操作可能・click対応」と分かります。scene nodeやGameObjectの内部構造をそのまま公開するものではなく、利用者が見て操作するUIだけを共通のprotocolへ変換します。

ゲームのUIengine adapterが収集Semantic UI Treeテスト・Inspector・AI

Tree全体が持つ情報

情報意味
screentitlesettingsなど、現在の論理画面名。
nodes現在公開されているUI nodeの一覧。parentIdで親子関係を表します。
frameSequenceadapterが公開したframeごとに増える番号。
revision画面名、node、状態、位置、対応actionのいずれかが変化したときだけ増える番号。
sessionEpochtest reset後の新しいsessionを識別し、古いsnapshotとの混同を防ぐ番号。
Semantic UI Tree snapshotの例json
{
  "schemaVersion": 2,
  "screen": "title",
  "frameSequence": 42,
  "revision": 7,
  "nodes": [
    {
      "id": "title/start",
      "role": "button",
      "label": "Start Game",
      "text": "Start Game",
      "visible": true,
      "enabled": true,
      "bounds": { "x": 520, "y": 430, "w": 240, "h": 64 },
      "actions": ["click", "focus"]
    }
  ]
}

各UI nodeが持つ情報

識別と構造

idparentIdroleで、どのUIで何の役割を持ち、どこに属するかを表します。

人が理解する内容

labeltextvalueで、名前、表示文字、入力値やslider値を表します。

現在の状態

visibleenabled、focus、hover、pressed、checked、selected、caret、selection、scroll、rangeなどを表します。

位置と対応操作

boundsは画面上の物理pixel位置です。actionsはその種類のnodeが構造上対応している操作を列挙します。

何ができるのか

観測する

現在のscreen、表示中のControl、text、入力値、選択状態、focus、scroll位置などを取得します。

意味で検索する

idrole、名前、text、親scope、表示・有効状態を組み合わせ、buttonやinput fieldを探します。

操作する

clickfocusset_valueset_checkedselectscrollpress_keyを対応nodeへ送ります。

変化を待って検証する

「Loadingが表示された」「buttonが有効になった」「checkboxがcheckされた」といった状態になるまで待ち、固定sleepなしで検証します。

World Object Tree・ゲーム入力との違い

Semantic UI Tree

button、label、dialog、input fieldなど、画面上のUIを観測・操作します。

World Object Tree

door、enemy、objective、checkpointなど、UIの外にあるゲーム世界を観測専用で公開します。

Semantic Game Action

jumpmoveなど、ゲームプレイ上の目的を操作します。

Raw Input

キーボード、マウス、gamepadをdeviceに近い形で操作します。