unity-version-split
GitHub将C#源文件按Unity版本(6.5+与旧版)拆分为两个变体,处理API变更导致的编译错误。
Trigger Scenarios
Install
npx skills add IvanMurzak/Unity-MCP --skill unity-version-split -g -y
SKILL.md
Frontmatter
{
"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]"
}
Unity Version Split
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).
When to Use
Unity 6.5 introduced breaking changes including:
EntityIdreplacesintfor instance IDs (GetEntityId()replacesGetInstanceID())EditorUtility.EntityIdToObject(EntityId)replacesEditorUtility.InstanceIDToObject(int)- Implicit
EntityId <-> intconversions are marked[Obsolete(..., true)](compile error)
When a file needs different code for these Unity versions, split it into two files following the project convention.
File Naming 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 |
Step-by-Step Process
Step 1 — Read the Source File
Read $ARGUMENTS (the target file path). Identify which parts need version-specific code.
Step 2 — Identify the Split Points
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? |
Step 3 — Create the Two Files
-
Update the original
.csfile to contain only the Unity 6.5+ version:- Set the preprocessor guard to include
UNITY_6000_5_OR_NEWER - Use
EntityId,GetEntityId(), etc.
- Set the preprocessor guard to include
-
Create the
.pre-Unity.6.5.csfile with the pre-6.5 version:- Set the preprocessor guard to include
!UNITY_6000_5_OR_NEWER - Use
int,GetInstanceID(), etc.
- Set the preprocessor guard to include
Both files must:
- Start with
#nullable enable - Have the same copyright header as the original
- Use the same namespace and class name (partial classes)
- End with
#endifmatching the opening#if
Step 4 — Refresh Assets
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.
Step 5 — Verify
Check for compilation errors using console-get-logs tool.
Example
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) { ... }
#endif
Reference Files
Existing examples of this pattern in the codebase:
Runtime/Data/ObjectRef.cs/ObjectRef.pre-Unity.6.5.csRuntime/Data/GameObjectRef.cs/GameObjectRef.pre-Unity.6.5.csRuntime/Utils/GameObjectUtils.Editor.cs/GameObjectUtils.Editor.pre-Unity.6.5.csTests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs/AssetsPrefabCreateTests.pre-Unity.6.5.cs
Version History
- 0.86.1 Current 2026-07-25 08:53


