Before calling any skill in this module: if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via GET /skills/recommend?includeSchema=true) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.
Triggers
- Building UGUI screens
- Adding Canvas elements
- Arranging UI layout
- 搭建 UGUI 界面、添加 Canvas 元素、排布 UI 布局
Unity UI Skills
Use this module for Unity UGUI / Canvas workflows. It is separate from UI Toolkit.
Batch-first: Prefer ui_create_batch when creating 2+ UI elements.
Operating Mode
- Approval:查询类 skill(
ui_find_all,源码标 SkillMode.SemiAuto)直接执行;其余创建/修改类(ui_create_* / ui_set_* / ui_add_* / ui_layout_children / ui_align_selected 等,标 SkillMode.FullAuto)需用户 grant,grant 后服务端一步执行返结果。
- Auto / Bypass:所有 skill 直接执行;Auto 走 AI 自我评估,Bypass 全放行。
- 本模块不含 Delete / PlayMode / Reload / 高危 skill,无 Bypass-only 拦截项。删除 UI 节点请走
gameobject 模块。
DO NOT (common hallucinations):
ui_add_canvas does not exist -> use ui_create_canvas
ui_create_label does not exist -> use ui_create_text
ui_create_checkbox does not exist -> use ui_create_toggle
ui_set_color does not exist -> use component_set_property on Image/Text, or the dedicated UI property skills when available
- Do not confuse UGUI (
ui) with UI Toolkit (uitoolkit)
Routing:
- For UXML/USS/UIDocument -> use
uitoolkit
- For text updates after creation -> use
ui_set_text
- For layout and alignment -> use
ui_layout_children, ui_align_selected, ui_distribute_selected
Skills
Create Skills
| Skill |
Use |
Key parameters |
ui_create_canvas |
Create Canvas |
name?, renderMode? |
ui_create_panel |
Create panel container |
name?, parent?, r/g/b/a? |
ui_create_button |
Create button |
name?, parent?, text?, width/height? |
ui_create_text |
Create text label |
name?, parent?, text?, fontSize?, r/g/b? |
ui_create_image |
Create image |
name?, parent?, spritePath?, width/height? |
ui_create_inputfield |
Create input field |
name?, parent?, placeholder?, width/height? |
ui_create_slider |
Create slider |
name?, parent?, minValue?, maxValue?, value? |
ui_create_toggle |
Create toggle |
name?, parent?, label?, isOn? |
ui_create_dropdown |
Create dropdown |
name?, parent?, options?, width/height? |
ui_create_scrollview |
Create ScrollRect hierarchy |
name?, parent?, width/height?, horizontal?, vertical? |
ui_create_rawimage |
Create RawImage |
name?, parent?, texturePath?, width/height? |
ui_create_scrollbar |
Create scrollbar |
name?, parent?, direction?, value?, size? |
ui_create_batch |
Create multiple UI elements |
items (JSON string array) |
Query and Layout Skills
| Skill |
Use |
Key parameters |
ui_find_all |
Find scene UI elements |
uiType?, limit? |
ui_set_text |
Update text content |
name, text |
ui_set_rect |
Set RectTransform size/offsets |
target, width, height, posX, posY, left/right/top/bottom? |
ui_get_rect_transform |
Read full RectTransform data |
target |
ui_set_rect_transform |
Set full RectTransform data |
anchors, pivot, offsets, local transform, width/height |
ui_set_rect_transform_batch |
Set full RectTransform data for multiple elements |
items |
ui_set_anchor |
Apply anchor preset |
target, preset?, setPivot? |
ui_layout_children |
Vertical/Horizontal/Grid layout |
target, layoutType?, spacing? |
ui_align_selected |
Align current selection |
alignment? |
ui_distribute_selected |
Distribute current selection |
direction? |
Property and Effect Skills
| Skill |
Use |
Key parameters |
ui_set_image |
Image type/fill/sprite |
target, type?, fillMethod?, fillAmount?, spritePath? |
ui_add_layout_element |
Add LayoutElement constraints |
target, width/height prefs, flex values |
ui_add_canvas_group |
Add CanvasGroup |
target, alpha?, interactable?, blocksRaycasts? |
ui_add_mask |
Add Mask or RectMask2D |
target, maskType?, showMaskGraphic? |
ui_add_outline |
Add Shadow/Outline effect |
target, effectType?, r/g/b/a?, distanceX/Y? |
ui_configure_selectable |
Configure transitions/navigation/colors |
target, transition?, navigationMode?, color values |
High-Frequency Defaults
Canvas and Parenting
ui_create_canvas defaults to ScreenSpaceOverlay.
- Most create skills accept
parent; if omitted, Unity will create under the active Canvas or scene root depending on the implementation context.
- For reusable menu groups, create the Canvas once, then create a Panel and put all child controls under that panel.
Common Create Parameters
| Skill |
High-frequency fields |
ui_create_button |
text, width, height |
ui_create_text |
text, fontSize, r/g/b |
ui_create_image |
spritePath, width, height |
ui_create_slider |
minValue, maxValue, value |
ui_create_toggle |
label, isOn |
ui_create_dropdown |
options |
ui_create_scrollview |
horizontal, vertical, movementType |
Important:
- Most create skills do not take explicit
x/y placement.
- Create first, then place/anchor with
ui_set_rect, ui_set_anchor, or ui_layout_children.
Full RectTransform Editing
Use ui_set_rect_transform when you need Inspector-level RectTransform coverage instead of a preset.
| Skill |
Parameters |
ui_get_rect_transform |
name, instanceId, path |
ui_set_rect_transform |
target + anchorMinX/Y, anchorMaxX/Y, pivotX/Y, anchoredPosX/Y/Z, sizeDeltaX/Y, offsetMinX/Y, offsetMaxX/Y, localPosX/Y/Z, localRotX/Y/Z, localScaleX/Y/Z, width, height |
ui_set_rect_transform_batch |
items JSON array with the same per-target fields |
ui_get_rect_transform
Get full RectTransform data for a UI element.
| Parameter |
Type |
Required |
Default |
Description |
name |
string |
No* |
null |
GameObject name |
instanceId |
int |
No* |
0 |
GameObject instance ID |
path |
string |
No* |
null |
Hierarchy path |
Returns: { success, name, instanceId, path, anchorMin, anchorMax, pivot, anchoredPosition3D, sizeDelta, offsetMin, offsetMax, localPosition, localEulerAngles, localScale, rect }
ui_set_rect_transform
Set full RectTransform data for a UI element.
| Parameter |
Type |
Required |
Default |
Description |
name |
string |
No* |
null |
GameObject name |
instanceId |
int |
No* |
0 |
GameObject instance ID |
path |
string |
No* |
null |
Hierarchy path |
anchorMinX / anchorMinY |
float |
No |
null |
Anchor min |
anchorMaxX / anchorMaxY |
float |
No |
null |
Anchor max |
pivotX / pivotY |
float |
No |
null |
Pivot |
anchoredPosX / anchoredPosY / anchoredPosZ |
float |
No |
null |
Anchored position 3D |
sizeDeltaX / sizeDeltaY |
float |
No |
null |
Size delta |
offsetMinX / offsetMinY |
float |
No |
null |
Offset min |
offsetMaxX / offsetMaxY |
float |
No |
null |
Offset max |
localPosX / localPosY / localPosZ |
float |
No |
null |
Local position |
localRotX / localRotY / localRotZ |
float |
No |
null |
Local euler rotation |
localScaleX / localScaleY / localScaleZ |
float |
No |
null |
Local scale |
width / height |
float |
No |
null |
Size with current anchors |
Returns: same shape as ui_get_rect_transform.
ui_set_rect_transform_batch
Set full RectTransform data for multiple UI elements.
| Parameter |
Type |
Required |
Default |
Description |
items |
json string |
Yes |
- |
JSON array of per-item target and RectTransform fields |
Returns: { success, totalItems, successCount, failCount, results }
Layout and Anchoring Rules
ui_set_anchor is the fastest way to move a control into a standard layout position.
ui_set_rect is better for precise size/offset edits after anchoring.
ui_layout_children is preferred over hand-positioning every child when building vertical, horizontal, or grid menus.
Anchor presets commonly used in production:
MiddleCenter for modal/menu panels
TopLeft or TopRight for HUD corners
StretchAll for full-screen backgrounds
TextMeshPro Note
Text creation auto-detects TMP:
- TMP available ->
TextMeshProUGUI
- TMP unavailable -> legacy
Text
Read the response payload if you need to know which one was created before later component-specific edits.
Workflow Notes
- Create a Canvas first.
- Use panels to group related controls.
- Prefer
ui_create_batch for menus, HUD groups, and repeated widgets.
- Use anchors and layout groups before hand-placing every child.
- Text creation auto-detects TextMeshPro. Responses indicate whether TMP was used.
- For world-space gameplay UI, build the Canvas here first.
ui_create_batch is mainly for bulk creation, not precise positioning. Follow it with layout or rect/anchor adjustments.
ui_create_batch.items is a JSON string parameter in the current REST/API layer, not a raw array object.
Minimal Example
import unity_skills
import json
unity_skills.call_skill("ui_create_canvas", name="MainMenu")
unity_skills.call_skill("ui_create_panel", name="MenuPanel", parent="MainMenu", a=0.7)
unity_skills.call_skill("ui_set_rect", name="MenuPanel", width=320, height=240)
unity_skills.call_skill("ui_create_batch", items=json.dumps([
{"type": "Button", "name": "StartBtn", "parent": "MenuPanel", "text": "Start", "width": 220, "height": 44},
{"type": "Button", "name": "OptionsBtn", "parent": "MenuPanel", "text": "Options", "width": 220, "height": 44},
{"type": "Button", "name": "QuitBtn", "parent": "MenuPanel", "text": "Quit", "width": 220, "height": 44}
]))
unity_skills.call_skill("ui_set_anchor", name="MenuPanel", preset="MiddleCenter")
unity_skills.call_skill("ui_layout_children", name="MenuPanel", layoutType="Vertical", spacing=12)
Exact Signatures
Exact names, parameters, defaults, and returns are defined by GET /skills/schema or unity_skills.get_skill_schema(), not by this file.
Load UI_REFERENCE.md for extended element creation details, property tables, and larger UGUI examples.
Common Errors
Full transport-level codes (COMPILING/RATE_LIMIT etc.) are in the unity-core plugin (optional), references/protocol-error-codes.md.
| Error |
Trigger |
Fix |
TARGET_NOT_FOUND |
The parent GameObject, UI element, RectTransform, Text/Image/Selectable component, or sprite asset could not be found. |
Use ui_find_all, gameobject_find, or scene_get_hierarchy to locate the element, and verify sprite paths with asset_find. |
SEMANTIC_INVALID |
An invalid value was supplied, such as an unknown anchor preset, layout type, alignment, or name/path with separators. |
Choose a valid preset/type from the error context (e.g., MiddleCenter, Vertical, TopLeft) and retry. |
SKILL_ERROR |
A selection-based operation failed because fewer than the required number of UI elements were selected (e.g., Select at least 2 UI elements). |
Select the required UI elements in the Hierarchy before calling alignment/distribution skills. |
1---2name: unity-ui-23description: Create and lay out Unity UGUI screens4---56> **Before calling any skill in this module:** if you are about to call a skill with parameters guessed from its name or description, STOP — read this file (or fetch its schema via `GET /skills/recommend?includeSchema=true`) first. If you already have the parameter definitions from recommend/schema, you may proceed straight to dryRun.78## Triggers9- Building UGUI screens10- Adding Canvas elements11- Arranging UI layout12- 搭建 UGUI 界面、添加 Canvas 元素、排布 UI 布局1314# Unity UI Skills1516Use this module for Unity UGUI / Canvas workflows. It is separate from UI Toolkit.1718> **Batch-first**: Prefer `ui_create_batch` when creating `2+` UI elements.1920## Operating Mode2122- **Approval**:查询类 skill(`ui_find_all`,源码标 `SkillMode.SemiAuto`)直接执行;其余创建/修改类(`ui_create_*` / `ui_set_*` / `ui_add_*` / `ui_layout_children` / `ui_align_selected` 等,标 `SkillMode.FullAuto`)需用户 grant,grant 后服务端一步执行返结果。23- **Auto / Bypass**:所有 skill 直接执行;Auto 走 AI 自我评估,Bypass 全放行。24- 本模块**不含** Delete / PlayMode / Reload / 高危 skill,无 Bypass-only 拦截项。删除 UI 节点请走 `gameobject` 模块。2526**DO NOT** (common hallucinations):27- `ui_add_canvas` does not exist -> use `ui_create_canvas`28- `ui_create_label` does not exist -> use `ui_create_text`29- `ui_create_checkbox` does not exist -> use `ui_create_toggle`30- `ui_set_color` does not exist -> use `component_set_property` on `Image`/`Text`, or the dedicated UI property skills when available31- Do not confuse UGUI (`ui`) with UI Toolkit (`uitoolkit`)3233**Routing**:34- For UXML/USS/UIDocument -> use `uitoolkit`35- For text updates after creation -> use `ui_set_text`36- For layout and alignment -> use `ui_layout_children`, `ui_align_selected`, `ui_distribute_selected`3738## Skills3940### Create Skills4142| Skill | Use | Key parameters |43|-------|-----|----------------|44| `ui_create_canvas` | Create Canvas | `name?`, `renderMode?` |45| `ui_create_panel` | Create panel container | `name?`, `parent?`, `r/g/b/a?` |46| `ui_create_button` | Create button | `name?`, `parent?`, `text?`, `width/height?` |47| `ui_create_text` | Create text label | `name?`, `parent?`, `text?`, `fontSize?`, `r/g/b?` |48| `ui_create_image` | Create image | `name?`, `parent?`, `spritePath?`, `width/height?` |49| `ui_create_inputfield` | Create input field | `name?`, `parent?`, `placeholder?`, `width/height?` |50| `ui_create_slider` | Create slider | `name?`, `parent?`, `minValue?`, `maxValue?`, `value?` |51| `ui_create_toggle` | Create toggle | `name?`, `parent?`, `label?`, `isOn?` |52| `ui_create_dropdown` | Create dropdown | `name?`, `parent?`, `options?`, `width/height?` |53| `ui_create_scrollview` | Create ScrollRect hierarchy | `name?`, `parent?`, `width/height?`, `horizontal?`, `vertical?` |54| `ui_create_rawimage` | Create RawImage | `name?`, `parent?`, `texturePath?`, `width/height?` |55| `ui_create_scrollbar` | Create scrollbar | `name?`, `parent?`, `direction?`, `value?`, `size?` |56| `ui_create_batch` | Create multiple UI elements | `items` (`JSON` string array) |5758### Query and Layout Skills5960| Skill | Use | Key parameters |61|-------|-----|----------------|62| `ui_find_all` | Find scene UI elements | `uiType?`, `limit?` |63| `ui_set_text` | Update text content | `name`, `text` |64| `ui_set_rect` | Set RectTransform size/offsets | target, `width`, `height`, `posX`, `posY`, `left/right/top/bottom?` |65| `ui_get_rect_transform` | Read full RectTransform data | target |66| `ui_set_rect_transform` | Set full RectTransform data | anchors, pivot, offsets, local transform, width/height |67| `ui_set_rect_transform_batch` | Set full RectTransform data for multiple elements | `items` |68| `ui_set_anchor` | Apply anchor preset | target, `preset?`, `setPivot?` |69| `ui_layout_children` | Vertical/Horizontal/Grid layout | target, `layoutType?`, `spacing?` |70| `ui_align_selected` | Align current selection | `alignment?` |71| `ui_distribute_selected` | Distribute current selection | `direction?` |7273### Property and Effect Skills7475| Skill | Use | Key parameters |76|-------|-----|----------------|77| `ui_set_image` | Image type/fill/sprite | target, `type?`, `fillMethod?`, `fillAmount?`, `spritePath?` |78| `ui_add_layout_element` | Add LayoutElement constraints | target, width/height prefs, flex values |79| `ui_add_canvas_group` | Add CanvasGroup | target, `alpha?`, `interactable?`, `blocksRaycasts?` |80| `ui_add_mask` | Add `Mask` or `RectMask2D` | target, `maskType?`, `showMaskGraphic?` |81| `ui_add_outline` | Add Shadow/Outline effect | target, `effectType?`, `r/g/b/a?`, `distanceX/Y?` |82| `ui_configure_selectable` | Configure transitions/navigation/colors | target, `transition?`, `navigationMode?`, color values |8384## High-Frequency Defaults8586### Canvas and Parenting8788- `ui_create_canvas` defaults to `ScreenSpaceOverlay`.89- Most create skills accept `parent`; if omitted, Unity will create under the active Canvas or scene root depending on the implementation context.90- For reusable menu groups, create the Canvas once, then create a Panel and put all child controls under that panel.9192### Common Create Parameters9394| Skill | High-frequency fields |95|-------|-----------------------|96| `ui_create_button` | `text`, `width`, `height` |97| `ui_create_text` | `text`, `fontSize`, `r/g/b` |98| `ui_create_image` | `spritePath`, `width`, `height` |99| `ui_create_slider` | `minValue`, `maxValue`, `value` |100| `ui_create_toggle` | `label`, `isOn` |101| `ui_create_dropdown` | `options` |102| `ui_create_scrollview` | `horizontal`, `vertical`, `movementType` |103104Important:105- Most create skills do **not** take explicit `x/y` placement.106- Create first, then place/anchor with `ui_set_rect`, `ui_set_anchor`, or `ui_layout_children`.107108### Full RectTransform Editing109110Use `ui_set_rect_transform` when you need Inspector-level RectTransform coverage instead of a preset.111112| Skill | Parameters |113|-------|------------|114| `ui_get_rect_transform` | `name`, `instanceId`, `path` |115| `ui_set_rect_transform` | target + `anchorMinX/Y`, `anchorMaxX/Y`, `pivotX/Y`, `anchoredPosX/Y/Z`, `sizeDeltaX/Y`, `offsetMinX/Y`, `offsetMaxX/Y`, `localPosX/Y/Z`, `localRotX/Y/Z`, `localScaleX/Y/Z`, `width`, `height` |116| `ui_set_rect_transform_batch` | `items` JSON array with the same per-target fields |117118### ui_get_rect_transform119Get full RectTransform data for a UI element.120121| Parameter | Type | Required | Default | Description |122|-----------|------|----------|---------|-------------|123| `name` | string | No* | null | GameObject name |124| `instanceId` | int | No* | 0 | GameObject instance ID |125| `path` | string | No* | null | Hierarchy path |126127**Returns:** `{ success, name, instanceId, path, anchorMin, anchorMax, pivot, anchoredPosition3D, sizeDelta, offsetMin, offsetMax, localPosition, localEulerAngles, localScale, rect }`128129### ui_set_rect_transform130Set full RectTransform data for a UI element.131132| Parameter | Type | Required | Default | Description |133|-----------|------|----------|---------|-------------|134| `name` | string | No* | null | GameObject name |135| `instanceId` | int | No* | 0 | GameObject instance ID |136| `path` | string | No* | null | Hierarchy path |137| `anchorMinX` / `anchorMinY` | float | No | null | Anchor min |138| `anchorMaxX` / `anchorMaxY` | float | No | null | Anchor max |139| `pivotX` / `pivotY` | float | No | null | Pivot |140| `anchoredPosX` / `anchoredPosY` / `anchoredPosZ` | float | No | null | Anchored position 3D |141| `sizeDeltaX` / `sizeDeltaY` | float | No | null | Size delta |142| `offsetMinX` / `offsetMinY` | float | No | null | Offset min |143| `offsetMaxX` / `offsetMaxY` | float | No | null | Offset max |144| `localPosX` / `localPosY` / `localPosZ` | float | No | null | Local position |145| `localRotX` / `localRotY` / `localRotZ` | float | No | null | Local euler rotation |146| `localScaleX` / `localScaleY` / `localScaleZ` | float | No | null | Local scale |147| `width` / `height` | float | No | null | Size with current anchors |148149**Returns:** same shape as `ui_get_rect_transform`.150151### ui_set_rect_transform_batch152Set full RectTransform data for multiple UI elements.153154| Parameter | Type | Required | Default | Description |155|-----------|------|----------|---------|-------------|156| `items` | json string | Yes | - | JSON array of per-item target and RectTransform fields |157158**Returns:** `{ success, totalItems, successCount, failCount, results }`159160### Layout and Anchoring Rules161162- `ui_set_anchor` is the fastest way to move a control into a standard layout position.163- `ui_set_rect` is better for precise size/offset edits after anchoring.164- `ui_layout_children` is preferred over hand-positioning every child when building vertical, horizontal, or grid menus.165166Anchor presets commonly used in production:167- `MiddleCenter` for modal/menu panels168- `TopLeft` or `TopRight` for HUD corners169- `StretchAll` for full-screen backgrounds170171### TextMeshPro Note172173Text creation auto-detects TMP:174- TMP available -> `TextMeshProUGUI`175- TMP unavailable -> legacy `Text`176177Read the response payload if you need to know which one was created before later component-specific edits.178179## Workflow Notes1801811. Create a Canvas first.1822. Use panels to group related controls.1833. Prefer `ui_create_batch` for menus, HUD groups, and repeated widgets.1844. Use anchors and layout groups before hand-placing every child.1855. Text creation auto-detects TextMeshPro. Responses indicate whether TMP was used.1866. For world-space gameplay UI, build the Canvas here first.1877. `ui_create_batch` is mainly for bulk creation, not precise positioning. Follow it with layout or rect/anchor adjustments.1888. `ui_create_batch.items` is a JSON string parameter in the current REST/API layer, not a raw array object.189190## Minimal Example191192```python193import unity_skills194import json195196unity_skills.call_skill("ui_create_canvas", name="MainMenu")197unity_skills.call_skill("ui_create_panel", name="MenuPanel", parent="MainMenu", a=0.7)198unity_skills.call_skill("ui_set_rect", name="MenuPanel", width=320, height=240)199unity_skills.call_skill("ui_create_batch", items=json.dumps([200 {"type": "Button", "name": "StartBtn", "parent": "MenuPanel", "text": "Start", "width": 220, "height": 44},201 {"type": "Button", "name": "OptionsBtn", "parent": "MenuPanel", "text": "Options", "width": 220, "height": 44},202 {"type": "Button", "name": "QuitBtn", "parent": "MenuPanel", "text": "Quit", "width": 220, "height": 44}203]))204205unity_skills.call_skill("ui_set_anchor", name="MenuPanel", preset="MiddleCenter")206unity_skills.call_skill("ui_layout_children", name="MenuPanel", layoutType="Vertical", spacing=12)207```208209## Exact Signatures210211Exact names, parameters, defaults, and returns are defined by `GET /skills/schema` or `unity_skills.get_skill_schema()`, not by this file.212Load `UI_REFERENCE.md` for extended element creation details, property tables, and larger UGUI examples.213214## Common Errors215216Full transport-level codes (COMPILING/RATE_LIMIT etc.) are in the unity-core plugin (optional), references/protocol-error-codes.md.217218| Error | Trigger | Fix |219|---|---|---|220| `TARGET_NOT_FOUND` | The parent GameObject, UI element, RectTransform, Text/Image/Selectable component, or sprite asset could not be found. | Use `ui_find_all`, `gameobject_find`, or `scene_get_hierarchy` to locate the element, and verify sprite paths with `asset_find`. |221| `SEMANTIC_INVALID` | An invalid value was supplied, such as an unknown anchor preset, layout type, alignment, or name/path with separators. | Choose a valid preset/type from the error context (e.g., `MiddleCenter`, `Vertical`, `TopLeft`) and retry. |222| `SKILL_ERROR` | A selection-based operation failed because fewer than the required number of UI elements were selected (e.g., `Select at least 2 UI elements`). | Select the required UI elements in the Hierarchy before calling alignment/distribution skills. |