6.9 KiB
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=trueoractive=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 compilewait playmodewait sleepwait 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"