Agent SkillsIvanMurzak/Unity-MCP › unity-version-split

unity-version-split

GitHub

将C#源文件按Unity版本(6.5+与旧版)拆分为两个变体,处理API变更导致的编译错误。

Unity-MCP-Plugin/.claude/skills/unity-version-split/SKILL.md IvanMurzak/Unity-MCP

Trigger Scenarios

需要适配Unity 6.5 API变更 解决EntityId与int类型不兼容问题

Install

npx skills add IvanMurzak/Unity-MCP --skill unity-version-split -g -y
More Options

Non-standard path

npx skills add https://github.com/IvanMurzak/Unity-MCP/tree/main/Unity-MCP-Plugin/.claude/skills/unity-version-split -g -y

Use without installing

npx skills use IvanMurzak/Unity-MCP@unity-version-split

指定 Agent (Claude Code)

npx skills add IvanMurzak/Unity-MCP --skill unity-version-split -a claude-code -g -y

安装 repo 全部 skill

npx skills add IvanMurzak/Unity-MCP --all -g -y

预览 repo 内 skill

npx skills add IvanMurzak/Unity-MCP --list

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:

  • EntityId replaces int for instance IDs (GetEntityId() replaces GetInstanceID())
  • EditorUtility.EntityIdToObject(EntityId) replaces EditorUtility.InstanceIDToObject(int)
  • Implicit EntityId <-> int conversions 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

  1. Update the original .cs file to contain only the Unity 6.5+ version:

    • Set the preprocessor guard to include UNITY_6000_5_OR_NEWER
    • Use EntityId, GetEntityId(), etc.
  2. Create the .pre-Unity.6.5.cs file with the pre-6.5 version:

    • Set the preprocessor guard to include !UNITY_6000_5_OR_NEWER
    • Use int, GetInstanceID(), etc.

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 #endif matching 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.cs
  • Runtime/Data/GameObjectRef.cs / GameObjectRef.pre-Unity.6.5.cs
  • Runtime/Utils/GameObjectUtils.Editor.cs / GameObjectUtils.Editor.pre-Unity.6.5.cs
  • Tests/Editor/Tool/Assets/AssetsPrefabCreateTests.cs / AssetsPrefabCreateTests.pre-Unity.6.5.cs

Version History

  • 0.86.1 Current 2026-07-25 08:53

Same Skill Collection

.claude/skills/build-cli/SKILL.md
.claude/skills/github-pr-review-fix/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-copy/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-create-folder/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-delete/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-find-built-in/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-find/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-get-data/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-material-create/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-modify/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-move/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-prefab-close/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-prefab-create/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-prefab-instantiate/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-prefab-open/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-prefab-save/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-refresh/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-shader-get-data/SKILL.md
Unity-MCP-Plugin/.claude/skills/assets-shader-list-all/SKILL.md
Unity-MCP-Plugin/.claude/skills/console-clear-logs/SKILL.md
Unity-MCP-Plugin/.claude/skills/console-get-logs/SKILL.md
Unity-MCP-Plugin/.claude/skills/editor-application-get-state/SKILL.md
Unity-MCP-Plugin/.claude/skills/editor-application-set-state/SKILL.md
Unity-MCP-Plugin/.claude/skills/editor-selection-get/SKILL.md
Unity-MCP-Plugin/.claude/skills/editor-selection-set/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-component-add/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-component-destroy/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-component-get/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-component-list-all/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-component-modify/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-create/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-destroy/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-duplicate/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-find/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-modify/SKILL.md
Unity-MCP-Plugin/.claude/skills/gameobject-set-parent/SKILL.md
Unity-MCP-Plugin/.claude/skills/object-get-data/SKILL.md
Unity-MCP-Plugin/.claude/skills/object-modify/SKILL.md
Unity-MCP-Plugin/.claude/skills/package-add/SKILL.md
Unity-MCP-Plugin/.claude/skills/package-list/SKILL.md
Unity-MCP-Plugin/.claude/skills/package-remove/SKILL.md
Unity-MCP-Plugin/.claude/skills/package-search/SKILL.md
Unity-MCP-Plugin/.claude/skills/ping/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-capture-frame/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-clear-data/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-enable-module/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-get-memory-stats/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-get-rendering-stats/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-get-script-stats/SKILL.md
Unity-MCP-Plugin/.claude/skills/profiler-get-status/SKILL.md

Metadata

Files
0
Version
0.88.0
Hash
b52243de
Indexed
2026-07-25 08:53

inicio - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-20 04:12
浙ICP备14020137号-1 $mapa de visitantes$