diff --git a/.claude/skills/uloop-execute-dynamic-code/SKILL.md b/.claude/skills/uloop-execute-dynamic-code/SKILL.md index 4eba4f007..0f5dce0b4 100644 --- a/.claude/skills/uloop-execute-dynamic-code/SKILL.md +++ b/.claude/skills/uloop-execute-dynamic-code/SKILL.md @@ -1,88 +1,75 @@ --- name: uloop-execute-dynamic-code -description: "Execute C# code dynamically in Unity Editor. Use when you need to: (1) Wire prefab/material references and AddComponent operations, (2) Edit SerializedObject properties and reference wiring, (3) Perform scene/hierarchy edits and batch operations. NOT for file I/O or script authoring." +description: "Execute C# code dynamically in Unity Editor. Use when you need to: (1) Wire prefab/material references and AddComponent operations, (2) Edit SerializedObject properties and reference wiring, (3) Perform scene/hierarchy edits and batch operations, (4) PlayMode automation (click buttons, raycast, invoke methods), (5) PlayMode UI controls (InputField, Slider, Toggle, Dropdown), (6) PlayMode inspection (scene info, reflection, physics state). NOT for file I/O or script authoring." +context: fork --- -# uloop execute-dynamic-code +# Task -Execute C# code dynamically in Unity Editor. +Execute the following request using `uloop execute-dynamic-code`: $ARGUMENTS -## Usage +## Workflow + +1. Read the relevant reference file(s) from the Code Examples section below +2. Construct C# code based on the reference examples +3. Execute via Bash: `uloop execute-dynamic-code --code ''` +4. If execution fails, adjust code and retry +5. Report the execution result + +## Tool Reference ```bash uloop execute-dynamic-code --code '' ``` -## Parameters +### Parameters | Parameter | Type | Default | Description | |-----------|------|---------|-------------| | `--code` | string | - | C# code to execute (direct statements, no class wrapper) | | `--compile-only` | boolean | `false` | Compile without execution | -| `--parameters` | object | - | Runtime parameters passed to the snippet (advanced; usually unnecessary) | -## Code Format +### Code Format Write direct statements only (no classes/namespaces/methods). Return is optional. ```csharp -// Using directives at top are hoisted using UnityEngine; var x = Mathf.PI; return x; ``` -## String Literals (Shell-specific) +### String Literals (Shell-specific) | Shell | Method | |-------|--------| | bash/zsh | `'Debug.Log("Hello!");'` | | PowerShell | `'Debug.Log(""Hello!"");'` | -## Allowed Operations +### Allowed Operations - Prefab/material wiring (PrefabUtility) - AddComponent + reference wiring (SerializedObject) - Scene/hierarchy edits - Inspector modifications -## Forbidden Operations +### Forbidden Operations - System.IO.* (File/Directory/Path) - AssetDatabase.CreateFolder / file writes - Create/edit .cs/.asmdef files -## Global Options +### Global Options | Option | Description | |--------|-------------| | `--project-path ` | Target a specific Unity project (mutually exclusive with `--port`) | | `-p, --port ` | Specify Unity TCP port directly (mutually exclusive with `--project-path`) | -## Examples - -### bash / zsh - -```bash -uloop execute-dynamic-code --code 'return Selection.activeGameObject?.name;' -uloop execute-dynamic-code --code 'new GameObject("MyObject");' -uloop execute-dynamic-code --code 'UnityEngine.Debug.Log("Hello from CLI!");' -``` - -### PowerShell - -```powershell -uloop execute-dynamic-code --code 'return Selection.activeGameObject?.name;' -uloop execute-dynamic-code --code 'new GameObject(""MyObject"");' -uloop execute-dynamic-code --code 'UnityEngine.Debug.Log(""Hello from CLI!"");' -``` - -## Output +### Output Returns JSON with execution result or compile errors. -## Notes - For file/directory operations, use terminal commands instead. ## Code Examples by Category @@ -99,3 +86,17 @@ For detailed code examples, refer to these files: - Create ScriptableObjects, modify with SerializedObject - **Scene operations**: See [references/scene-operations.md](references/scene-operations.md) - Create/modify GameObjects, set parents, wire references, load scenes +- **Batch operations**: See [references/batch-operations.md](references/batch-operations.md) + - Bulk modify objects, batch add/remove components, rename, layer/tag/material replacement +- **Cleanup operations**: See [references/cleanup-operations.md](references/cleanup-operations.md) + - Detect broken scripts, missing references, unused materials, empty GameObjects +- **Undo operations**: See [references/undo-operations.md](references/undo-operations.md) + - Undo-aware operations: RecordObject, AddComponent, SetParent, grouping +- **Selection operations**: See [references/selection-operations.md](references/selection-operations.md) + - Get/set selection, multi-select, filter by type/editability +- **PlayMode automation**: See [references/playmode-automation.md](references/playmode-automation.md) + - Click UI buttons, raycast interaction, invoke methods, set fields, tool combination workflows +- **PlayMode UI controls**: See [references/playmode-ui-controls.md](references/playmode-ui-controls.md) + - InputField, Slider, Toggle, Dropdown, drag & drop simulation, list all UI controls +- **PlayMode inspection**: See [references/playmode-inspection.md](references/playmode-inspection.md) + - Scene info, game state via reflection, physics state, GameObject search, position/rotation diff --git a/.claude/skills/uloop-execute-dynamic-code/references/playmode-automation.md b/.claude/skills/uloop-execute-dynamic-code/references/playmode-automation.md new file mode 100644 index 000000000..8217d0693 --- /dev/null +++ b/.claude/skills/uloop-execute-dynamic-code/references/playmode-automation.md @@ -0,0 +1,289 @@ +# PlayMode Automation + +Code examples for runtime automation during Play mode using `execute-dynamic-code`. +These examples manipulate live scene objects while the game is running. + +## Click UI Button by Path + +```csharp +using UnityEngine.UI; + +Button btn = GameObject.Find("Canvas/StartButton")?.GetComponent