build-cli
Build the unity-mcp-cli TypeScript CLI tool and link it globally for terminal use.
Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID).
$ npx -y skills add IvanMurzak/Unity-MCP --skill unity-version-split --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/unity-version-splitContext preview
The summary Claude sees to decide when to auto-load this skill.
Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID).
name: unity-version-split description: "Split a C# file into Unity 6.5+ and pre-Unity 6.5 variants. Use when a file needs different implementations for different Unity versions due to API changes (e.g., EntityId vs int, GetEntityId vs GetInstanceID)." argument-hint: "[path to the .cs file that needs splitting]"
Split a C# source file into two variants: one for Unity 6.5+ (`UNITY_6000_5_OR_NEWER`) and one for older versions (pre-Unity 6.5).
Unity 6.5 introduced breaking changes including:
When a file needs different code for these Unity versions, split it into two files following the project convention.
| File | Purpose | Preprocessor Guard | |---|---|---| | `FileName.cs` | Unity 6.5+ (newer version) | `#if UNITY_6000_5_OR_NEWER` | | `FileName.pre-Unity.6.5.cs` | Pre-Unity 6.5 (older version) | `#if !UNITY_6000_5_OR_NEWER` |
For files that also have Editor/Runtime variants, combine the guards: | File | Guard | |---|---| | `FileName.Editor.cs` | `#if UNITY_EDITOR && UNITY_6000_5_OR_NEWER` | | `FileName.Editor.pre-Unity.6.5.cs` | `#if UNITY_EDITOR && !UNITY_6000_5_OR_NEWER` | | `FileName.Runtime.cs` | `#if !UNITY_EDITOR && UNITY_6000_5_OR_NEWER` | | `FileName.Runtime.pre-Unity.6.5.cs` | `#if !UNITY_EDITOR && !UNITY_6000_5_OR_NEWER` |
Read `$ARGUMENTS` (the target file path). Identify which parts need version-specific code.
Common differences between Unity 6.5+ and pre-6.5:
| Unity 6.5+ | Pre-Unity 6.5 | |---|---| | `EntityId` | `int` | | `EntityId.None` | `0` | | `go.GetEntityId()` | `go.GetInstanceID()` | | `EditorUtility.EntityIdToObject(entityId)` | `EditorUtility.InstanceIDToObject(instanceID)` | | `ObjectRef.InstanceID` is `EntityId` | `ObjectRef.InstanceID` is `int?` |
1. **Update the original `.cs` file** to contain only the Unity 6.5+ version:
2. **Create the `.pre-Unity.6.5.cs` file** with the pre-6.5 version:
Both files must:
Run `assets-refresh` tool to let Unity generate `.meta` files and recompile.
**IMPORTANT: Do NOT manually create `.meta` files.** Unity auto-generates them after `assets-refresh` or any AssetDatabase.Refresh() call.
Check for compilation errors using `console-get-logs` tool.
Given `GameObjectUtils.Runtime.cs` with `#if !UNITY_EDITOR` that uses both `EntityId` and `int` with `#if UNITY_6000_5_OR_NEWER` inside:
**Before (single file with nested #if):**
#if !UNITY_EDITOR
// ...
#if UNITY_6000_5_OR_NEWER
public static GameObject? FindByInstanceID(EntityId instanceID) { ... }
#else
public static GameObject? FindByInstanceID(int instanceID) { ... }
#endif
#endif**After (two clean files):**
`GameObjectUtils.Runtime.cs`:
#if !UNITY_EDITOR && UNITY_6000_5_OR_NEWER
// ...
public static GameObject? FindByInstanceID(EntityId instanceID) { ... }
#endif`GameObjectUtils.Runtime.pre-Unity.6.5.cs`:
#if !UNITY_EDITOR && !UNITY_6000_5_OR_NEWER
// ...
public static GameObject? FindByInstanceID(int instanceID) { ... }
#endifExisting examples of this pattern in the codebase:
Get up and running in three steps: Install plugin — download the .unitypackage installer or run openupm add com.ivanmurzak.unity.mcp Alternative: npx unity-mcp-cli install-plugin ./MyUnityProject — see CLI documentation Pick an AI agent — Claude Code, Claude
Repo: IvanMurzak/Unity-MCP
Build the unity-mcp-cli TypeScript CLI tool and link it globally for terminal use.
Review and resolve PR comments from GitHub. Validates each comment, fixes legitimate issues.
Copy assets at given paths and store them at new paths. Refreshes the AssetDatabase at the end. Use 'assets-find' to locate the source assets first.
Create a new folder under a parent folder inside 'Assets/'. The parent path must start with 'Assets/' and every intermediate folder in it must already exist.…
Delete the assets at the given project paths. Refreshes the AssetDatabase at the end. Use 'assets-find' to locate the assets first.
Search the built-in assets of the Unity Editor (located at Resources/unity_builtin_extra). Filters by name and/or type; built-in assets have no GUID so…