本文へ移動
cccskills
無料GitHub で公開

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

インストール方法を見る

含まれるファイル(1)

  • SKILL.md4.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

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.

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

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. Refreshes the AssetDatabase at the end and returns the GUID(s) of the created folder(s).

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

Delete the assets at the given project paths. Refreshes the AssetDatabase at the end. Use 'assets-find' to locate the assets first.

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

Search the Unity asset database using a search filter string. The filter accepts names, labels (`l:`), types (`t:`), AssetBundles (`b:`), areas (`a:`), and globs (`glob:`). See the body for the full filter syntax.

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

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 GUID-based lookups are not supported.

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

Get asset data from the asset file in the Unity project — every serializable field and property. Supports token-saving path-scoped reads via `paths` or `viewQuery`. Use 'assets-find' to find the asset first.

日本語の概要は準備中です。原文の説明を表示しています。

IvanMurzak/Unity-MCP4,4182026年10月10日 更新

IvanMurzak のスキルをすべて見る

このスキルの問題を報告する