GGua 日本語リファレンス
英語版が正式な参照です。内容に差異がある場合は、英語版を優先してください。
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へ変換します。

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

Tree全体が持つ情報

情報意味
screentitleやsettingsなど、現在の論理画面名。
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が持つ情報

識別と構造

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

人が理解する内容

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

現在の状態

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

位置と対応操作

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

何ができるのか

観測する

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

意味で検索する

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

操作する

click、focus、set_value、set_checked、select、scroll、press_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

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

Raw Input

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

構造を検査しbaselineを比較する

Gua.Core.GuaSemanticLinter.Analyzeはlocal contextまたはprojection済みの保存UI/World snapshotを検査し、重複ID、参照切れ、accessible nameの不足、role/action/stateの矛盾を見つけます。bridgeの明示的なsemantic_lint commandはprojection後のtreeを検査します。lintは読み取り専用で、テストの失敗基準は呼び出し側が決めます。lint規則とAPIを参照してください。

期待する意味的な状態との比較にはGua.Testing.Snapshotsを追加し、review済みJSON baselineを使います。maskは取得前に設定しますが、screenshotや別のTrace値は消しません。Snapshotsの導入と例を参照してください。