Semantic UI Treeとは?
ゲームが描画した画面を画像解析するのではなく、UIの構造と意味を同じframeのsnapshotとして表します。たとえば「このnodeはStart Gameというbuttonで、表示中・操作可能・click対応」と分かります。scene nodeやGameObjectの内部構造をそのまま公開するものではなく、利用者が見て操作するUIだけを共通のprotocolへ変換します。
Tree全体が持つ情報
| 情報 | 意味 |
|---|---|
screen | titleやsettingsなど、現在の論理画面名。 |
nodes | 現在公開されているUI nodeの一覧。parentIdで親子関係を表します。 |
frameSequence | adapterが公開したframeごとに増える番号。 |
revision | 画面名、node、状態、位置、対応actionのいずれかが変化したときだけ増える番号。 |
sessionEpoch | test reset後の新しいsessionを識別し、古いsnapshotとの混同を防ぐ番号。 |
{
"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・ゲーム入力との違い
button、label、dialog、input fieldなど、画面上のUIを観測・操作します。
door、enemy、objective、checkpointなど、UIの外にあるゲーム世界を観測専用で公開します。
jumpやmoveなど、ゲームプレイ上の目的を操作します。
キーボード、マウス、gamepadをdeviceに近い形で操作します。