From 6f21e8b893e284ccdf79102a98dd875e640169b9 Mon Sep 17 00:00:00 2001 From: Abhi Date: Fri, 19 Jun 2026 20:46:04 +0800 Subject: [PATCH 1/2] Fix Unity 6000.5 compatibility: use EntityId APIs Unity 6000.5 renamed the int-based instance ID APIs to the 64-bit EntityId type and marked Object.GetInstanceID() and EditorUtility.InstanceIDToObject(int) obsolete-as-error (CS0619). Add version-gated wrappers (GetObjectInstanceId / ResolveObjectById) that use the new EntityId APIs on Unity 6000.5+ and fall back to the legacy APIs on older versions (package still targets Unity 2022.3+). Instance-ID handles remain int across the protocol; on 6000.5+ they round-trip through EntityId.ToULong()/FromULong(). Also route the CLI's generated eval --id preamble through the new ResolveObjectById helper so it compiles under Unity 6000.5. --- UnityCtl.Cli/ScriptCommands.cs | 4 +- .../Unit/Cli/EvalCodeGeneratorTests.cs | 8 +-- .../Editor/UnityCtlClient.cs | 59 ++++++++++++++----- 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/UnityCtl.Cli/ScriptCommands.cs b/UnityCtl.Cli/ScriptCommands.cs index 8c86184..d53b15a 100644 --- a/UnityCtl.Cli/ScriptCommands.cs +++ b/UnityCtl.Cli/ScriptCommands.cs @@ -637,7 +637,7 @@ internal static string BuildInstanceIdPreamble(int[] ids) if (ids.Length == 1) { - sb.Append($"var target = (GameObject)UnityEditor.EditorUtility.InstanceIDToObject({ids[0]});"); + sb.Append($"var target = (GameObject)UnityCtl.UnityCtlClient.ResolveObjectById({ids[0]});"); sb.Append($"{pad}if (target == null) throw new System.Exception(\"Object {ids[0]} not found (destroyed?)\");"); } else @@ -645,7 +645,7 @@ internal static string BuildInstanceIdPreamble(int[] ids) sb.Append($"var targets = new GameObject[{ids.Length}];"); for (int i = 0; i < ids.Length; i++) { - sb.Append($"{pad}targets[{i}] = (GameObject)UnityEditor.EditorUtility.InstanceIDToObject({ids[i]});"); + sb.Append($"{pad}targets[{i}] = (GameObject)UnityCtl.UnityCtlClient.ResolveObjectById({ids[i]});"); sb.Append($"{pad}if (targets[{i}] == null) throw new System.Exception(\"Object {ids[i]} not found (destroyed?)\");"); } } diff --git a/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs b/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs index 277a431..ceb3f1a 100644 --- a/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs +++ b/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs @@ -119,7 +119,7 @@ public void InstanceId_SingleId_InjectsTarget() { var code = ScriptCommands.BuildEvalCode("target.name", [], hasArgs: false, instanceIds: "14200"); - Assert.Contains("InstanceIDToObject(14200)", code); + Assert.Contains("ResolveObjectById(14200)", code); Assert.Contains("var target =", code); } @@ -129,8 +129,8 @@ public void InstanceId_MultipleIds_InjectsTargetsArray() var code = ScriptCommands.BuildEvalCode("targets[0].name", [], hasArgs: false, instanceIds: "14200,14210"); Assert.Contains("var targets = new GameObject[2]", code); - Assert.Contains("InstanceIDToObject(14200)", code); - Assert.Contains("InstanceIDToObject(14210)", code); + Assert.Contains("ResolveObjectById(14200)", code); + Assert.Contains("ResolveObjectById(14210)", code); } [Fact] @@ -138,7 +138,7 @@ public void InstanceId_NegativeId_Accepted() { var code = ScriptCommands.BuildEvalCode("target.name", [], hasArgs: false, instanceIds: "-1290"); - Assert.Contains("InstanceIDToObject(-1290)", code); + Assert.Contains("ResolveObjectById(-1290)", code); } [Fact] diff --git a/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs b/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs index 5296828..9d8691c 100644 --- a/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs +++ b/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs @@ -1772,7 +1772,7 @@ private Protocol.SnapshotResult SnapshotSpecificScene(string scenePath, int? tar { if (targetId.HasValue) { - var go = EditorUtility.InstanceIDToObject(targetId.Value) as GameObject; + var go = ResolveObjectById(targetId.Value) as GameObject; if (go == null || go.scene != scene) throw new ArgumentException($"No GameObject with instance ID {targetId} in scene {scenePath}"); @@ -1837,7 +1837,7 @@ private Protocol.SnapshotResult SnapshotSpecificScene(string scenePath, int? tar private Protocol.SnapshotResult SnapshotDrillDown(int targetId, string filter, int depth, bool includeComponents, bool screen) { - var go = EditorUtility.InstanceIDToObject(targetId) as GameObject; + var go = ResolveObjectById(targetId) as GameObject; if (go == null) throw new ArgumentException($"No GameObject with instance ID {targetId}"); @@ -1966,9 +1966,38 @@ private Protocol.SnapshotResult SnapshotCurrentStage(string filter, int depth, b }; } + // --- Unity 6000.5 EntityId compatibility ------------------------------ + // Unity 6000.5 renamed the int-based "instance ID" APIs to the 64-bit + // EntityId type and marked Object.GetInstanceID() and + // EditorUtility.InstanceIDToObject(int) obsolete-as-error. These wrappers + // keep the package compiling on Unity 2022.3+ while using the new APIs on + // 6000.5+. Handles are still surfaced as int through the protocol; on + // 6000.5+ they round-trip through EntityId.ToULong()/FromULong(), which is + // lossless while editor entity IDs stay within 32 bits. + + internal static int GetObjectInstanceId(UnityEngine.Object obj) + { +#if UNITY_6000_5_OR_NEWER + return unchecked((int)UnityEngine.EntityId.ToULong(obj.GetEntityId())); +#else + return obj.GetInstanceID(); +#endif + } + + public static UnityEngine.Object ResolveObjectById(int id) + { +#if UNITY_6000_5_OR_NEWER + // Editor scene objects carry negative instance IDs, so sign-extend the + // int back to the 64-bit value GetEntityId().ToULong() produced. + return EditorUtility.EntityIdToObject(UnityEngine.EntityId.FromULong(unchecked((ulong)(long)id))); +#else + return EditorUtility.InstanceIDToObject(id); +#endif + } + private static GameObject FindInHierarchy(GameObject root, int instanceId) { - if (root.GetInstanceID() == instanceId) return root; + if (GetObjectInstanceId(root) == instanceId) return root; foreach (Transform child in root.transform) { var found = FindInHierarchy(child.gameObject, instanceId); @@ -1996,7 +2025,7 @@ private StageInfo GetStageInfo() { var instanceRoot = prefabStage.openedFromInstanceRoot; if (instanceRoot != null) - openedFrom = instanceRoot.GetInstanceID(); + openedFrom = GetObjectInstanceId(instanceRoot); } return new StageInfo @@ -2036,7 +2065,7 @@ private object HandlePrefabOpen(RequestMessage request) if (contextInstanceId.HasValue) { - var instance = EditorUtility.InstanceIDToObject(contextInstanceId.Value) as GameObject; + var instance = ResolveObjectById(contextInstanceId.Value) as GameObject; if (instance == null) throw new ArgumentException($"Context instance not found: {contextInstanceId.Value}"); if (!PrefabUtility.IsPartOfPrefabInstance(instance)) @@ -2103,7 +2132,7 @@ private static Protocol.SnapshotObject SerializeGameObject( var t = go.transform; var obj = new Protocol.SnapshotObject { - InstanceId = go.GetInstanceID(), + InstanceId = GetObjectInstanceId(go), Name = go.name, Active = go.activeSelf, Tag = go.tag != "Untagged" ? go.tag : null, @@ -2489,7 +2518,7 @@ private static void ComputeScreenSpaceInfo(GameObject go, Protocol.SnapshotObjec var centerX = (minX + maxX) / 2f; var centerY = (minY + maxY) / 2f; var hitId = GetUIHitAtPoint(new Vector2(centerX, centerY)); - if (hitId == go.GetInstanceID() || IsDescendantOf(hitId, go)) + if (hitId == GetObjectInstanceId(go) || IsDescendantOf(hitId, go)) { obj.Hittable = true; } @@ -2516,7 +2545,7 @@ private static int GetUIHitAtPoint(Vector2 screenPoint) var pointerData = new PointerEventData(EventSystem.current) { position = screenPoint }; var results = new List(); EventSystem.current.RaycastAll(pointerData, results); - return results.Count > 0 ? results[0].gameObject.GetInstanceID() : 0; + return results.Count > 0 ? GetObjectInstanceId(results[0].gameObject) : 0; } /// @@ -2562,7 +2591,7 @@ private object HandleSnapshotQuery(RequestMessage request) { uiHits.Add(new Protocol.SnapshotQueryHit { - InstanceId = r.gameObject.GetInstanceID(), + InstanceId = GetObjectInstanceId(r.gameObject), Name = r.gameObject.name, Path = GetHierarchyPath(r.gameObject), Text = GetUIText(r.gameObject), @@ -2602,7 +2631,7 @@ private object HandleSnapshotQuery(RequestMessage request) { uiHits.Add(new Protocol.SnapshotQueryHit { - InstanceId = g.gameObject.GetInstanceID(), + InstanceId = GetObjectInstanceId(g.gameObject), Name = g.gameObject.name, Path = GetHierarchyPath(g.gameObject), Text = GetUIText(g.gameObject), @@ -2640,7 +2669,7 @@ private object HandleUIClick(RequestMessage request) if (targetId.HasValue) { // Resolve by instance ID - target = EditorUtility.InstanceIDToObject(targetId.Value) as GameObject; + target = ResolveObjectById(targetId.Value) as GameObject; if (target == null) throw new ArgumentException($"No GameObject with instance ID {targetId.Value}"); @@ -2662,7 +2691,7 @@ private object HandleUIClick(RequestMessage request) if (topHit != target && !topHit.transform.IsChildOf(target.transform)) { throw new InvalidOperationException( - $"'{target.name}' [i:{targetId.Value}] is blocked by '{topHit.name}' [i:{topHit.GetInstanceID()}]"); + $"'{target.name}' [i:{targetId.Value}] is blocked by '{topHit.name}' [i:{GetObjectInstanceId(topHit)}]"); } } } @@ -2690,7 +2719,7 @@ private object HandleUIClick(RequestMessage request) if (topHit != target && !topHit.transform.IsChildOf(target.transform)) { throw new InvalidOperationException( - $"'{target.name}' [i:{target.GetInstanceID()}] is blocked by '{topHit.name}' [i:{topHit.GetInstanceID()}]"); + $"'{target.name}' [i:{GetObjectInstanceId(target)}] is blocked by '{topHit.name}' [i:{GetObjectInstanceId(topHit)}]"); } } } @@ -2739,7 +2768,7 @@ private object HandleUIClick(RequestMessage request) return new Protocol.UIClickResult { - InstanceId = target.GetInstanceID(), + InstanceId = GetObjectInstanceId(target), Name = target.name, Path = GetHierarchyPath(target), ScreenPosition = string.Format(System.Globalization.CultureInfo.InvariantCulture, @@ -2764,7 +2793,7 @@ private static Vector2 GetRectScreenCenter(RectTransform rt) /// private static bool IsDescendantOf(int instanceId, GameObject parent) { - var obj = EditorUtility.InstanceIDToObject(instanceId) as GameObject; + var obj = ResolveObjectById(instanceId) as GameObject; if (obj == null) return false; var t = obj.transform; while (t != null) From 8f638821404ac7fe8744aa495027f848d74e2b31 Mon Sep 17 00:00:00 2001 From: Martin Vagstad Date: Mon, 22 Jun 2026 10:19:06 +0200 Subject: [PATCH 2/2] @ Widen instance-id handles to long; adopt EntityId from 6000.3 Builds on the 6000.5 EntityId migration. Moves the #if gate to 6000.3, where the int-based instance-ID APIs are already deprecated (CS0618) and EntityId exists, so 6.3/6.4 stop emitting deprecation warnings. Uses a three-way path because EntityId is int-backed on 6000.3/.4 (implicit int conversions) and only 64-bit (ToULong/FromULong) on 6000.5+. Surfaces handles as long end-to-end so a 6000.5 64-bit EntityId is never truncated; narrower ids widen and narrow back exactly: - Protocol DTOs: InstanceId, OpenedFromInstanceId, BlockedBy - CLI: --id options (snapshot, ui click), ParseInstanceIds + eval preamble - Package: wrappers, GetLongArgument, targetId/context paths, StageInfo - Rebuilt bundled UnityCtl.Protocol.dll Verified on 6000.3.15f1: compiles clean (no Safe Mode), deprecation warnings gone, snapshot --id round-trips. dotnet build + 482 tests pass. @ --- UnityCtl.Cli/ScriptCommands.cs | 8 +- UnityCtl.Cli/SnapshotCommand.cs | 2 +- UnityCtl.Cli/UICommands.cs | 2 +- UnityCtl.Protocol/DTOs.cs | 10 +- .../Unit/Cli/EvalCodeGeneratorTests.cs | 17 ++++ .../Editor/UnityCtlClient.cs | 87 ++++++++++++------ .../Plugins/UnityCtl.Protocol.dll | Bin 56832 -> 58880 bytes 7 files changed, 89 insertions(+), 37 deletions(-) diff --git a/UnityCtl.Cli/ScriptCommands.cs b/UnityCtl.Cli/ScriptCommands.cs index d53b15a..3a79646 100644 --- a/UnityCtl.Cli/ScriptCommands.cs +++ b/UnityCtl.Cli/ScriptCommands.cs @@ -613,15 +613,15 @@ internal static string ExtractLeadingUsingDirectives(string expression, List(); + var ids = new List(); foreach (var part in parts) { var trimmed = part.Trim(); if (trimmed.Length == 0) continue; - if (!int.TryParse(trimmed, out var id)) + if (!long.TryParse(trimmed, out var id)) throw new ArgumentException($"Invalid instance ID: '{trimmed}' — must be an integer"); ids.Add(id); } @@ -630,7 +630,7 @@ internal static int[] ParseInstanceIds(string idArg) return ids.ToArray(); } - internal static string BuildInstanceIdPreamble(int[] ids) + internal static string BuildInstanceIdPreamble(long[] ids) { const string pad = "\n "; var sb = new System.Text.StringBuilder(); diff --git a/UnityCtl.Cli/SnapshotCommand.cs b/UnityCtl.Cli/SnapshotCommand.cs index 58fa304..c2d512a 100644 --- a/UnityCtl.Cli/SnapshotCommand.cs +++ b/UnityCtl.Cli/SnapshotCommand.cs @@ -16,7 +16,7 @@ public static Command CreateCommand() { var snapshotCommand = new Command("snapshot", "Snapshot the scene hierarchy as a compact, LLM-friendly tree with instance IDs"); - var idOption = new Option( + var idOption = new Option( "--id", "Drill into a specific object by instance ID" ); diff --git a/UnityCtl.Cli/UICommands.cs b/UnityCtl.Cli/UICommands.cs index b2de53a..f952a9d 100644 --- a/UnityCtl.Cli/UICommands.cs +++ b/UnityCtl.Cli/UICommands.cs @@ -20,7 +20,7 @@ private static Command CreateClickCommand() { var clickCommand = new Command("click", "Click a UI element by instance ID, name, or screen coordinates"); - var idOption = new Option("--id", "Instance ID of the UI element to click"); + var idOption = new Option("--id", "Instance ID of the UI element to click"); var nameOption = new Option("--name", "Find and click a GameObject by name (uses GameObject.Find)"); var xArg = new Argument("x", () => null, "Screen X coordinate"); var yArg = new Argument("y", () => null, "Screen Y coordinate"); diff --git a/UnityCtl.Protocol/DTOs.cs b/UnityCtl.Protocol/DTOs.cs index e7acf2e..2d97c21 100644 --- a/UnityCtl.Protocol/DTOs.cs +++ b/UnityCtl.Protocol/DTOs.cs @@ -473,7 +473,7 @@ public class SnapshotResult public bool? HasUnsavedChanges { get; init; } [JsonProperty("openedFromInstanceId", NullValueHandling = NullValueHandling.Ignore)] - public int? OpenedFromInstanceId { get; init; } + public long? OpenedFromInstanceId { get; init; } [JsonProperty("isPlaying")] public required bool IsPlaying { get; init; } @@ -521,7 +521,7 @@ public class SnapshotSceneInfo public class SnapshotObject { [JsonProperty("instanceId")] - public int InstanceId { get; set; } + public long InstanceId { get; set; } [JsonProperty("name")] public string Name { get; set; } = ""; @@ -583,7 +583,7 @@ public class SnapshotObject public bool? Hittable { get; set; } [JsonProperty("blockedBy", NullValueHandling = NullValueHandling.Ignore)] - public int? BlockedBy { get; set; } + public long? BlockedBy { get; set; } [JsonProperty("childCount")] public int ChildCount { get; set; } @@ -646,7 +646,7 @@ public class SnapshotQueryResult public class SnapshotQueryHit { [JsonProperty("instanceId")] - public int InstanceId { get; set; } + public long InstanceId { get; set; } [JsonProperty("name")] public string Name { get; set; } = ""; @@ -664,7 +664,7 @@ public class SnapshotQueryHit public class UIClickResult { [JsonProperty("instanceId")] - public int InstanceId { get; set; } + public long InstanceId { get; set; } [JsonProperty("name")] public string Name { get; set; } = ""; diff --git a/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs b/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs index ceb3f1a..26e36ad 100644 --- a/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs +++ b/UnityCtl.Tests/Unit/Cli/EvalCodeGeneratorTests.cs @@ -141,6 +141,15 @@ public void InstanceId_NegativeId_Accepted() Assert.Contains("ResolveObjectById(-1290)", code); } + [Fact] + public void InstanceId_BeyondInt32_Accepted() + { + // Unity 6000.5 EntityIds are 64-bit; ids beyond int range must round-trip. + var code = ScriptCommands.BuildEvalCode("target.name", [], hasArgs: false, instanceIds: "5000000000"); + + Assert.Contains("ResolveObjectById(5000000000)", code); + } + [Fact] public void ParseInstanceIds_InvalidInput_Throws() { @@ -157,6 +166,14 @@ public void ParseInstanceIds_ValidInput_ReturnsInts() Assert.Equal([14200, -1290, 0], ids); } + [Fact] + public void ParseInstanceIds_BeyondInt32_ParsesAsLong() + { + var ids = ScriptCommands.ParseInstanceIds("5000000000,-5000000000"); + + Assert.Equal([5000000000L, -5000000000L], ids); + } + [Fact] public void ExtraUsings_CommaSeparated_SplitIntoMultiple() { diff --git a/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs b/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs index 9d8691c..43ff339 100644 --- a/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs +++ b/UnityCtl.UnityPackage/Editor/UnityCtlClient.cs @@ -811,6 +811,36 @@ private static string GetStringArgument(RequestMessage request, string key) return null; } + private static long? GetLongArgument(RequestMessage request, string key) + { + if (request.Args == null) return null; + + try + { + if (request.Args is System.Collections.IDictionary dict && dict.Contains(key)) + { + var value = dict[key]; + if (value == null) return null; + + if (value is long longValue) return longValue; + if (value is int intValue) return intValue; + + if (value is JToken jtoken && jtoken.Type == JTokenType.Integer) + return jtoken.Value(); + + if (long.TryParse(value.ToString(), out var parsed)) return parsed; + + DebugLog($"[UnityCtl] Could not parse argument '{key}' as long: {value}"); + } + } + catch (Exception ex) + { + DebugLogError($"[UnityCtl] Failed to get long argument '{key}': {ex.Message}"); + } + + return null; + } + private static double? GetDoubleArgument(RequestMessage request, string key) { if (request.Args == null) return null; @@ -1683,7 +1713,7 @@ private object HandleScriptMembers(RequestMessage request) private object HandleSnapshot(RequestMessage request) { var depth = GetIntArgument(request, "depth") ?? 2; - var targetId = GetIntArgument(request, "id"); + var targetId = GetLongArgument(request, "id"); var includeComponents = GetBoolArgument(request, "components"); var screen = GetBoolArgument(request, "screen"); var filter = GetStringArgument(request, "filter"); @@ -1714,7 +1744,7 @@ private object HandleSnapshot(RequestMessage request) return result; } - private Protocol.SnapshotResult SnapshotPrefabAsset(string prefabPath, int? targetId, string filter, int depth, bool includeComponents, bool screen) + private Protocol.SnapshotResult SnapshotPrefabAsset(string prefabPath, long? targetId, string filter, int depth, bool includeComponents, bool screen) { if (!prefabPath.EndsWith(".prefab")) throw new ArgumentException($"Not a prefab asset: {prefabPath} (must end with .prefab)"); @@ -1755,7 +1785,7 @@ private Protocol.SnapshotResult SnapshotPrefabAsset(string prefabPath, int? targ }; } - private Protocol.SnapshotResult SnapshotSpecificScene(string scenePath, int? targetId, string filter, int depth, bool includeComponents, bool screen) + private Protocol.SnapshotResult SnapshotSpecificScene(string scenePath, long? targetId, string filter, int depth, bool includeComponents, bool screen) { if (EditorApplication.isPlaying) throw new InvalidOperationException("Cannot snapshot other scenes during play mode. Use snapshot without --scene for the active scene."); @@ -1835,7 +1865,7 @@ private Protocol.SnapshotResult SnapshotSpecificScene(string scenePath, int? tar } } - private Protocol.SnapshotResult SnapshotDrillDown(int targetId, string filter, int depth, bool includeComponents, bool screen) + private Protocol.SnapshotResult SnapshotDrillDown(long targetId, string filter, int depth, bool includeComponents, bool screen) { var go = ResolveObjectById(targetId) as GameObject; if (go == null) @@ -1966,36 +1996,41 @@ private Protocol.SnapshotResult SnapshotCurrentStage(string filter, int depth, b }; } - // --- Unity 6000.5 EntityId compatibility ------------------------------ - // Unity 6000.5 renamed the int-based "instance ID" APIs to the 64-bit - // EntityId type and marked Object.GetInstanceID() and - // EditorUtility.InstanceIDToObject(int) obsolete-as-error. These wrappers - // keep the package compiling on Unity 2022.3+ while using the new APIs on - // 6000.5+. Handles are still surfaced as int through the protocol; on - // 6000.5+ they round-trip through EntityId.ToULong()/FromULong(), which is - // lossless while editor entity IDs stay within 32 bits. + // --- Unity EntityId compatibility ------------------------------------- + // Unity introduced the EntityId type in 6000.3 and deprecated (warning) + // Object.GetInstanceID() and EditorUtility.InstanceIDToObject(int) there; + // 6000.5 promotes those to obsolete-as-error and widens EntityId to 64-bit + // (EntityId.ToULong/FromULong). We adopt the new APIs from 6000.3 to stay + // warning-free, with three regimes: + // * 6000.5+ : EntityId is 64-bit; round-trip losslessly via ToULong/FromULong. + // * 6000.3/.4 : EntityId is int-backed and converts implicitly to/from int. + // * pre-6000.3: legacy GetInstanceID()/InstanceIDToObject(int). + // Handles are surfaced as 64-bit (long) through the protocol so a 6000.5 id + // is never truncated; narrower ids simply widen to long and narrow back. - internal static int GetObjectInstanceId(UnityEngine.Object obj) + internal static long GetObjectInstanceId(UnityEngine.Object obj) { #if UNITY_6000_5_OR_NEWER - return unchecked((int)UnityEngine.EntityId.ToULong(obj.GetEntityId())); + return unchecked((long)UnityEngine.EntityId.ToULong(obj.GetEntityId())); +#elif UNITY_6000_3_OR_NEWER + return (int)obj.GetEntityId(); #else return obj.GetInstanceID(); #endif } - public static UnityEngine.Object ResolveObjectById(int id) + public static UnityEngine.Object ResolveObjectById(long id) { #if UNITY_6000_5_OR_NEWER - // Editor scene objects carry negative instance IDs, so sign-extend the - // int back to the 64-bit value GetEntityId().ToULong() produced. - return EditorUtility.EntityIdToObject(UnityEngine.EntityId.FromULong(unchecked((ulong)(long)id))); + return EditorUtility.EntityIdToObject(UnityEngine.EntityId.FromULong(unchecked((ulong)id))); +#elif UNITY_6000_3_OR_NEWER + return EditorUtility.EntityIdToObject((UnityEngine.EntityId)unchecked((int)id)); #else - return EditorUtility.InstanceIDToObject(id); + return EditorUtility.InstanceIDToObject(unchecked((int)id)); #endif } - private static GameObject FindInHierarchy(GameObject root, int instanceId) + private static GameObject FindInHierarchy(GameObject root, long instanceId) { if (GetObjectInstanceId(root) == instanceId) return root; foreach (Transform child in root.transform) @@ -2011,7 +2046,7 @@ private struct StageInfo public string Stage; public string PrefabAssetPath; public bool? HasUnsavedChanges; - public int? OpenedFromInstanceId; + public long? OpenedFromInstanceId; } private StageInfo GetStageInfo() @@ -2020,7 +2055,7 @@ private StageInfo GetStageInfo() if (prefabStage != null) { var isInContext = prefabStage.mode == PrefabStage.Mode.InContext; - int? openedFrom = null; + long? openedFrom = null; if (isInContext) { var instanceRoot = prefabStage.openedFromInstanceRoot; @@ -2061,7 +2096,7 @@ private object HandlePrefabOpen(RequestMessage request) if (asset == null) throw new ArgumentException($"Prefab not found: {path}"); - var contextInstanceId = GetIntArgument(request, "context"); + var contextInstanceId = GetLongArgument(request, "context"); if (contextInstanceId.HasValue) { @@ -2538,7 +2573,7 @@ private static void ComputeScreenSpaceInfo(GameObject go, Protocol.SnapshotObjec /// Returns the instance ID of the top UI element at the given screen point, or 0 if nothing. /// Requires play mode with an active EventSystem. /// - private static int GetUIHitAtPoint(Vector2 screenPoint) + private static long GetUIHitAtPoint(Vector2 screenPoint) { if (EventSystem.current == null) return 0; @@ -2658,7 +2693,7 @@ private object HandleUIClick(RequestMessage request) if (EventSystem.current == null) throw new InvalidOperationException("No EventSystem found in scene"); - var targetId = GetIntArgument(request, "id"); + var targetId = GetLongArgument(request, "id"); var targetName = GetStringArgument(request, "name"); var x = GetIntArgument(request, "x"); var y = GetIntArgument(request, "y"); @@ -2791,7 +2826,7 @@ private static Vector2 GetRectScreenCenter(RectTransform rt) /// /// Returns true if the object with the given instance ID is a descendant of parent. /// - private static bool IsDescendantOf(int instanceId, GameObject parent) + private static bool IsDescendantOf(long instanceId, GameObject parent) { var obj = ResolveObjectById(instanceId) as GameObject; if (obj == null) return false; diff --git a/UnityCtl.UnityPackage/Plugins/UnityCtl.Protocol.dll b/UnityCtl.UnityPackage/Plugins/UnityCtl.Protocol.dll index 36111196542ef8f8d5719b6553431aa8027283e2..f378f1bbc7c1cb76d7b6edc348ee5419c4267d28 100644 GIT binary patch literal 58880 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 hog4@H-{K{*SNt#Z`#UOyh^ycELb1P!^d*J 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