Files
gh-dev-gom-claude-code-mark…/skills/references/COMMANDS_CHAIN.md
2025-11-29 18:19:28 +08:00

6.9 KiB

Chain Commands Reference

Execute multiple Unity commands sequentially with error handling.

Command Format

cd <unity-project-root>
node .unity-websocket/uw.js chain <subcommand> [options]

Subcommands

chain execute

Execute commands from a JSON file.

Usage:

node .unity-websocket/uw.js chain execute <file> [options]

Arguments:

  • <file> - Path to JSON file containing commands

Options:

  • --json - Output in JSON format
  • --stop-on-error - Stop on first error (default: true)
  • --continue-on-error - Continue execution even if a command fails
  • --timeout <ms> - Timeout in milliseconds (default: 300000 = 5 minutes)

JSON File Format:

[
  {
    "method": "Editor.Refresh",
    "parameters": null
  },
  {
    "method": "GameObject.Create",
    "parameters": {
      "name": "TestObject"
    }
  },
  {
    "method": "Console.Clear"
  }
]

Or with wrapper:

{
  "commands": [
    { "method": "Editor.Refresh" },
    { "method": "Console.Clear" }
  ]
}

Examples:

# Execute commands from file
cd <unity-project-root> && node .unity-websocket/uw.js chain execute commands.json

# Continue on error
cd <unity-project-root> && node .unity-websocket/uw.js chain execute commands.json --continue-on-error

# JSON output
cd <unity-project-root> && node .unity-websocket/uw.js chain execute commands.json --json

chain exec

Execute commands inline (without JSON file).

Usage:

node .unity-websocket/uw.js chain exec <commands...> [options]

Arguments:

  • <commands...> - One or more commands in format: method:param1=value1,param2=value2

Options:

  • --json - Output in JSON format
  • --stop-on-error - Stop on first error (default: true)
  • --continue-on-error - Continue execution even if a command fails
  • --timeout <ms> - Timeout in milliseconds (default: 300000 = 5 minutes)

Command Format:

  • Simple: "Editor.Refresh"
  • With params: "GameObject.Create:name=Test"
  • Multiple params: "GameObject.SetActive:instanceId=123,active=true"

Parameter Parsing:

  • Strings: name=MyObject
  • Numbers: instanceId=123
  • Booleans: active=true or active=false

Examples:

# Simple commands
cd <unity-project-root> && node .unity-websocket/uw.js chain exec "Editor.Refresh" "Console.Clear"

# Commands with parameters
cd <unity-project-root> && node .unity-websocket/uw.js chain exec \
  "GameObject.Create:name=Player" \
  "GameObject.SetActive:instanceId=123,active=true"

# Continue on error
cd <unity-project-root> && node .unity-websocket/uw.js chain exec \
  "Editor.Refresh" \
  "GameObject.Find:path=InvalidPath" \
  "Console.Clear" \
  --continue-on-error

Important Notes

Supported Commands

Chain supports immediate response commands only. The following are NOT supported:

Wait commands (delayed response):

  • wait compile
  • wait playmode
  • wait sleep
  • wait scene

All other commands (immediate response):

  • GameObject commands
  • Transform commands
  • Scene commands
  • Console commands
  • Editor commands
  • Prefs commands

Workaround for Wait:

# Instead of chaining Wait commands:
cd <unity-project-root>
node .unity-websocket/uw.js wait compile
node .unity-websocket/uw.js chain exec "Editor.Refresh" "Console.Clear"

Error Handling

Stop on Error (default):

# Stops at first failure
node .unity-websocket/uw.js chain exec "Editor.Refresh" "Invalid.Command" "Console.Clear"
# Result: Refresh succeeds, Invalid.Command fails, Console.Clear skipped

Continue on Error:

# Continues despite failures
node .unity-websocket/uw.js chain exec "Editor.Refresh" "Invalid.Command" "Console.Clear" --continue-on-error
# Result: Refresh succeeds, Invalid.Command fails, Console.Clear succeeds

Timeout Behavior

  • Default timeout: 300 seconds (5 minutes) for entire chain
  • Each command has its own execution time
  • Total elapsed time is reported in response

Output Format

CLI Output

Success:

✓ Chain execution completed
  Total commands: 3
  Executed: 3
  Total time: 0.015s

  [1] ✓ Editor.Refresh (0.010s)
  [2] ✓ GameObject.Create (0.003s)
  [3] ✓ Console.Clear (0.002s)

With Errors:

✓ Chain execution completed
  Total commands: 3
  Executed: 2
  Total time: 0.012s

  [1] ✓ Editor.Refresh (0.010s)
  [2] ✗ GameObject.Find (0.002s)
      Error: GameObject not found: InvalidPath

JSON Output

Success:

{
  "success": true,
  "totalCommands": 3,
  "executedCommands": 3,
  "totalElapsed": 0.015,
  "results": [
    {
      "index": 0,
      "method": "Editor.Refresh",
      "success": true,
      "result": { "success": true, "message": "AssetDatabase refreshed" },
      "elapsed": 0.010
    },
    {
      "index": 1,
      "method": "GameObject.Create",
      "success": true,
      "result": { "instanceId": 12345, "name": "TestObject" },
      "elapsed": 0.003
    },
    {
      "index": 2,
      "method": "Console.Clear",
      "success": true,
      "result": { "success": true, "cleared": 10 },
      "elapsed": 0.002
    }
  ]
}

With Errors:

{
  "success": true,
  "totalCommands": 3,
  "executedCommands": 2,
  "totalElapsed": 0.012,
  "results": [
    {
      "index": 0,
      "method": "Editor.Refresh",
      "success": true,
      "result": { "success": true, "message": "AssetDatabase refreshed" },
      "elapsed": 0.010
    },
    {
      "index": 1,
      "method": "GameObject.Find",
      "success": false,
      "error": "GameObject not found: InvalidPath",
      "elapsed": 0.002
    }
  ]
}

Common Workflows

Cleanup Workflow

{
  "commands": [
    { "method": "Console.Clear" },
    { "method": "Editor.Refresh" },
    { "method": "Scene.Load", "parameters": { "name": "MainScene" } }
  ]
}
cd <unity-project-root> && node .unity-websocket/uw.js chain execute cleanup.json

GameObject Batch Creation

cd <unity-project-root> && node .unity-websocket/uw.js chain exec \
  "GameObject.Create:name=Player" \
  "GameObject.Create:name=Enemy" \
  "GameObject.Create:name=Pickup" \
  "Console.Clear"

Error-Tolerant Cleanup

{
  "commands": [
    { "method": "GameObject.Destroy", "parameters": { "path": "OldObject1" } },
    { "method": "GameObject.Destroy", "parameters": { "path": "OldObject2" } },
    { "method": "GameObject.Destroy", "parameters": { "path": "OldObject3" } },
    { "method": "Console.Clear" }
  ]
}
# Continue even if some objects don't exist
cd <unity-project-root> && node .unity-websocket/uw.js chain execute cleanup.json --continue-on-error

CI/CD Pipeline

#!/bin/bash
cd /path/to/unity/project

# Cleanup
node .unity-websocket/uw.js chain exec "Console.Clear" "Editor.Refresh"

# Wait for compilation
node .unity-websocket/uw.js wait compile

# Run tests (example)
node .unity-websocket/uw.js chain exec \
  "Scene.Load:name=TestScene" \
  "GameObject.Find:path=TestRunner" \
  "Console.Clear"