CtrlK
BlogDocsLog inGet started
Tessl Logo

unity-version-split

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).

79

Quality

100%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

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

FilePurposePreprocessor Guard
FileName.csUnity 6.5+ (newer version)#if UNITY_6000_5_OR_NEWER
FileName.pre-Unity.6.5.csPre-Unity 6.5 (older version)#if !UNITY_6000_5_OR_NEWER

For files that also have Editor/Runtime variants, combine the guards:

FileGuard
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
EntityIdint
EntityId.None0
go.GetEntityId()go.GetInstanceID()
EditorUtility.EntityIdToObject(entityId)EditorUtility.InstanceIDToObject(instanceID)
ObjectRef.InstanceID is EntityIdObjectRef.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
Repository
IvanMurzak/Unity-MCP
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.