Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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).
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 89% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-12 | ✗→✓ | ▲ Improved | -63% | 0% |
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:
EntityId replaces int for instance IDs (GetEntityId() replaces GetInstanceID())EditorUtility.EntityIdToObject(EntityId) replaces EditorUtility.InstanceIDToObject(int)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 | 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? |
.cs file to contain only the Unity 6.5+ version:UNITY_6000_5_OR_NEWEREntityId, GetEntityId(), etc..pre-Unity.6.5.cs file with the pre-6.5 version:!UNITY_6000_5_OR_NEWERint, GetInstanceID(), etc.Both files must:
#nullable enable#endif matching the opening #ifRun 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):
csharp#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:
csharp#if !UNITY_EDITOR && UNITY_6000_5_OR_NEWER // ... public static GameObject? FindByInstanceID(EntityId instanceID) { ... } #endif
GameObjectUtils.Runtime.pre-Unity.6.5.cs:
csharp#if !UNITY_EDITOR && !UNITY_6000_5_OR_NEWER // ... public static GameObject? FindByInstanceID(int instanceID) { ... } #endif
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.csOther measured skills in the registry, with their headline benchmark lift.