From 45f0e3226204c20c60a97ee00bf890a02c393a60 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Thu, 19 Feb 2026 21:51:58 +0100 Subject: [PATCH] [unity] Fixed remaining obsolete method calls in Editor project part. Uses new API to apply regions as texture sprite slices. --- .../Spine/Editor/spine-unity-editor.asmdef | 12 ++++- .../Asset Types/SpineAtlasAssetInspector.cs | 49 +++++++++++++++++-- .../BoundingBoxFollowerGraphicInspector.cs | 9 ++++ .../BoundingBoxFollowerInspector.cs | 13 ++++- .../SkeletonUtilityBoneInspector.cs | 8 +++ .../Editor/Utility/AssetUtility.cs | 8 +++ .../Editor/Utility/BuildSettings.cs | 38 +++++++++++--- .../Editor/Utility/DataReloadHandler.cs | 20 ++++++++ .../Editor/Utility/SkeletonGraphicUtility.cs | 8 +++ spine-unity/Assets/Spine/package.json | 5 +- 10 files changed, 152 insertions(+), 18 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity-editor.asmdef b/spine-unity/Assets/Spine/Editor/spine-unity-editor.asmdef index 104b0924f..975d9b765 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity-editor.asmdef +++ b/spine-unity/Assets/Spine/Editor/spine-unity-editor.asmdef @@ -2,12 +2,20 @@ "name": "spine-unity-editor", "references": [ "spine-csharp", - "spine-unity" + "spine-unity", + "Unity.2D.Sprite.Editor" ], "optionalUnityReferences": [], "includePlatforms": [ "Editor" ], "excludePlatforms": [], - "allowUnsafeCode": false + "allowUnsafeCode": false, + "versionDefines": [ + { + "name": "com.unity.2d.sprite", + "expression": "1.0.0", + "define": "TEXTUREIMPORTER_SPRITESHEET_OBSOLETE" + } + ] } \ No newline at end of file diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs index dafbad5ee..b4632fddc 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Asset Types/SpineAtlasAssetInspector.cs @@ -27,9 +27,22 @@ * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ +#if UNITY_6000_3_OR_NEWER +#define GET_ASSET_PATH_USES_ENTITY_ID +#endif + +//#if UNITY_2022_2_OR_NEWER +// note: defined by spine-unity-editor.asmdef file when package is actually found +//#define TEXTUREIMPORTER_SPRITESHEET_OBSOLETE +//#endif + //#define BAKE_ALL_BUTTON //#define REGION_BAKING_MESH +#if TEXTUREIMPORTER_SPRITESHEET_OBSOLETE +using UnityEditor.U2D.Sprites; +#endif + using Spine; using System; using System.Collections.Generic; @@ -39,6 +52,11 @@ using UnityEngine; namespace Spine.Unity.Editor { using Event = UnityEngine.Event; +#if TEXTUREIMPORTER_SPRITESHEET_OBSOLETE + using SpriteDataType = SpriteRect; +#else + using SpriteDataType = SpriteMetaData; +#endif [CustomEditor(typeof(SpineAtlasAsset)), CanEditMultipleObjects] public class SpineAtlasAssetInspector : UnityEditor.Editor { @@ -142,12 +160,16 @@ namespace Spine.Unity.Editor { EditorGUILayout.PropertyField(textureLoadingMode); EditorGUILayout.PropertyField(onDemandTextureLoader); } - + EditorGUILayout.Space(); if (SpineInspectorUtility.LargeCenteredButton(SpineInspectorUtility.TempContent("Set Mipmap Bias to " + SpinePreferences.DEFAULT_MIPMAPBIAS, tooltip: "This may help textures with mipmaps be less blurry when used for 2D sprites."))) { foreach (Material m in atlasAsset.materials) { Texture texture = m.mainTexture; +#if GET_ASSET_PATH_USES_ENTITY_ID + string texturePath = AssetDatabase.GetAssetPath(texture.GetEntityId()); +#else string texturePath = AssetDatabase.GetAssetPath(texture.GetInstanceID()); +#endif TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(texturePath); importer.mipMapBias = SpinePreferences.DEFAULT_MIPMAPBIAS; EditorUtility.SetDirty(texture); @@ -324,11 +346,26 @@ namespace Spine.Unity.Editor { } static public void UpdateSpriteSlices (Texture texture, Atlas atlas) { +#if GET_ASSET_PATH_USES_ENTITY_ID + string texturePath = AssetDatabase.GetAssetPath(texture.GetEntityId()); +#else string texturePath = AssetDatabase.GetAssetPath(texture.GetInstanceID()); +#endif TextureImporter t = (TextureImporter)TextureImporter.GetAtPath(texturePath); t.spriteImportMode = SpriteImportMode.Multiple; +#if TEXTUREIMPORTER_SPRITESHEET_OBSOLETE + SpriteDataProviderFactories factory = new SpriteDataProviderFactories(); + factory.Init(); + ISpriteEditorDataProvider dataProvider = factory.GetSpriteEditorDataProviderFromObject(t); + dataProvider.InitSpriteEditorDataProvider(); + + // Read existing sprite rects + SpriteRect[] spriteRects = dataProvider.GetSpriteRects(); + List sprites = new List(spriteRects); +#else SpriteMetaData[] spriteSheet = t.spritesheet; List sprites = new List(spriteSheet); +#endif List regions = SpineAtlasAssetInspector.GetRegions(atlas); int updatedCount = 0; @@ -366,12 +403,12 @@ namespace Spine.Unity.Editor { spriteRect.y = r.page.height - spriteRect.height - r.y; if (spriteNameMatchExists) { - SpriteMetaData s = sprites[spriteIndex]; + SpriteDataType s = sprites[spriteIndex]; s.rect = spriteRect; sprites[spriteIndex] = s; updatedCount++; } else { - sprites.Add(new SpriteMetaData { + sprites.Add(new SpriteDataType { name = r.name, pivot = new Vector2(0.5f, 0.5f), rect = spriteRect @@ -381,8 +418,12 @@ namespace Spine.Unity.Editor { } } - +#if TEXTUREIMPORTER_SPRITESHEET_OBSOLETE + dataProvider.SetSpriteRects(spriteRects); + dataProvider.Apply(); +#else t.spritesheet = sprites.ToArray(); +#endif EditorUtility.SetDirty(t); AssetDatabase.ImportAsset(texturePath, ImportAssetOptions.ForceUpdate); EditorGUIUtility.PingObject(texture); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs index 3757aa5bd..9ba7f8530 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerGraphicInspector.cs @@ -31,6 +31,10 @@ #define NEW_PREFAB_SYSTEM #endif +#if UNITY_2023_1_OR_NEWER +#define USE_COLLIDER_COMPOSITE_OPERATION +#endif + using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -136,7 +140,12 @@ namespace Spine.Unity.Editor { foreach (PolygonCollider2D col in follower.colliderTable.Values) { col.isTrigger = isTrigger.boolValue; col.usedByEffector = usedByEffector.boolValue; +#if USE_COLLIDER_COMPOSITE_OPERATION + col.compositeOperation = usedByComposite.boolValue ? + Collider2D.CompositeOperation.Merge : Collider2D.CompositeOperation.None; +#else col.usedByComposite = usedByComposite.boolValue; +#endif } } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs index e7dd65e8a..17676631d 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/BoundingBoxFollowerInspector.cs @@ -31,6 +31,10 @@ #define NEW_PREFAB_SYSTEM #endif +#if UNITY_2023_1_OR_NEWER +#define USE_COLLIDER_COMPOSITE_OPERATION +#endif + using System.Collections.Generic; using UnityEditor; using UnityEngine; @@ -136,7 +140,12 @@ namespace Spine.Unity.Editor { foreach (PolygonCollider2D col in follower.colliderTable.Values) { col.isTrigger = isTrigger.boolValue; col.usedByEffector = usedByEffector.boolValue; +#if USE_COLLIDER_COMPOSITE_OPERATION + col.compositeOperation = usedByComposite.boolValue ? + Collider2D.CompositeOperation.Merge : Collider2D.CompositeOperation.None; +#else col.usedByComposite = usedByComposite.boolValue; +#endif } } } @@ -201,7 +210,7 @@ namespace Spine.Unity.Editor { } } - #region Menus +#region Menus [MenuItem("CONTEXT/SkeletonRenderer/Add BoundingBoxFollower GameObject")] static void AddBoundingBoxFollowerChild (MenuCommand command) { GameObject go = AddBoundingBoxFollowerChild((SkeletonRenderer)command.context); @@ -214,7 +223,7 @@ namespace Spine.Unity.Editor { foreach (GameObject go in objects) Undo.RegisterCreatedObjectUndo(go, "Add BoundingBoxFollower"); } - #endregion +#endregion public static GameObject AddBoundingBoxFollowerChild (SkeletonRenderer skeletonRenderer, BoundingBoxFollower original = null, string name = "BoundingBoxFollower", diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs index aad275784..99ed51a2b 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonUtilityBoneInspector.cs @@ -33,6 +33,10 @@ #define HINGE_JOINT_NEW_BEHAVIOUR #endif +#if UNITY_6000_0_OR_NEWER +#define USE_RIGIDBODY_BODY_TYPE +#endif + using Spine; using System.Collections.Generic; using UnityEditor; @@ -338,7 +342,11 @@ namespace Spine.Unity.Editor { rootFollowerKinematic.transform.parent = normalChainParentObject.transform; Rigidbody2D followerRigidbody = rootFollowerKinematic.AddComponent(); followerRigidbody.mass = mass; +#if USE_RIGIDBODY_BODY_TYPE + followerRigidbody.bodyType = RigidbodyType2D.Kinematic; +#else followerRigidbody.isKinematic = true; +#endif rootFollowerKinematic.AddComponent().reference = kinematicParentUtilityBone.transform; rootFollowerKinematic.transform.position = kinematicParentUtilityBone.transform.position; rootFollowerKinematic.transform.rotation = kinematicParentUtilityBone.transform.rotation; diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs index 066866a39..ff209e05f 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/AssetUtility.cs @@ -63,6 +63,10 @@ #define HAS_CULL_TRANSPARENT_MESH #endif +#if UNITY_6000_3_OR_NEWER +#define USES_ENTITY_ID +#endif + using System.Collections.Generic; using System.IO; using System.Linq; @@ -605,7 +609,11 @@ namespace Spine.Unity.Editor { skeletonDataAtlasAssets[i].Equals(null) && skeletonDataAtlasAssets[i].GetInstanceID() != 0 ) { +#if USES_ENTITY_ID + skeletonDataAtlasAssets[i] = EditorUtility.EntityIdToObject(skeletonDataAtlasAssets[i].GetEntityId()) as AtlasAssetBase; +#else skeletonDataAtlasAssets[i] = EditorUtility.InstanceIDToObject(skeletonDataAtlasAssets[i].GetInstanceID()) as AtlasAssetBase; +#endif } } } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs index 01c4db818..9c01577a5 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/BuildSettings.cs @@ -35,14 +35,18 @@ #define NEWPLAYMODECALLBACKS #endif -#if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER +#if UNITY_2018_3_OR_NEWER #define NEW_PREFAB_SYSTEM #endif -#if UNITY_2018 || UNITY_2019 || UNITY_2018_3_OR_NEWER +#if UNITY_2018_3_OR_NEWER #define NEWHIERARCHYWINDOWCALLBACKS #endif +#if UNITY_2021_2_OR_NEWER +#define USES_NAMED_BUILD_TARGETS +#endif + using System.Collections.Generic; using System.Globalization; using System.IO; @@ -91,35 +95,45 @@ namespace Spine.Unity.Editor { static bool IsInvalidGroup (BuildTargetGroup group) { int gi = (int)group; return - gi == 15 || gi == 16 - || - group == BuildTargetGroup.Unknown; + gi == 15 || gi == 16 || group == BuildTargetGroup.Unknown; } public static bool EnableBuildDefine (string define) { bool wasDefineAdded = false; + +#if !USES_NAMED_BUILD_TARGETS Debug.LogWarning("Please ignore errors \"PlayerSettings Validation: Requested build target group doesn't exist\" below"); +#endif foreach (BuildTargetGroup group in System.Enum.GetValues(typeof(BuildTargetGroup))) { if (IsInvalidGroup(group)) continue; try { +#if USES_NAMED_BUILD_TARGETS + var target = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(group); + string defines = PlayerSettings.GetScriptingDefineSymbols(target); +#else string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group); +#endif if (!defines.Contains(define)) { wasDefineAdded = true; if (defines.EndsWith(";", System.StringComparison.Ordinal)) defines += define; else defines += ";" + define; - +#if USES_NAMED_BUILD_TARGETS + PlayerSettings.SetScriptingDefineSymbols(target, defines); +#else PlayerSettings.SetScriptingDefineSymbolsForGroup(group, defines); +#endif } } catch (System.Exception) { } } +#if !USES_NAMED_BUILD_TARGETS Debug.LogWarning("Please ignore errors \"PlayerSettings Validation: Requested build target group doesn't exist\" above"); - +#endif if (wasDefineAdded) { Debug.LogWarning("Setting Scripting Define Symbol " + define); } else { @@ -136,15 +150,23 @@ namespace Spine.Unity.Editor { continue; try { +#if USES_NAMED_BUILD_TARGETS + var target = UnityEditor.Build.NamedBuildTarget.FromBuildTargetGroup(group); + string defines = PlayerSettings.GetScriptingDefineSymbols(target); +#else string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(group); +#endif if (defines.Contains(define)) { wasDefineRemoved = true; if (defines.Contains(define + ";")) defines = defines.Replace(define + ";", ""); else defines = defines.Replace(define, ""); - +#if USES_NAMED_BUILD_TARGETS + PlayerSettings.SetScriptingDefineSymbols(target, defines); +#else PlayerSettings.SetScriptingDefineSymbolsForGroup(group, defines); +#endif } } catch (System.Exception) { } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs index 6c07ad79a..30b06e571 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/DataReloadHandler.cs @@ -35,6 +35,10 @@ #define NEWPLAYMODECALLBACKS #endif +#if UNITY_2022_2_OR_NEWER +#define USE_FIND_OBJECTS_BY_TYPE +#endif + using System.Collections.Generic; using System.Globalization; using System.IO; @@ -68,7 +72,11 @@ namespace Spine.Unity.Editor { HashSet skeletonDataAssetsToReload = new HashSet(); +#if USE_FIND_OBJECTS_BY_TYPE + SkeletonRenderer[] activeSkeletonRenderers = GameObject.FindObjectsByType(FindObjectsSortMode.None); +#else SkeletonRenderer[] activeSkeletonRenderers = GameObject.FindObjectsOfType(); +#endif foreach (SkeletonRenderer sr in activeSkeletonRenderers) { SkeletonDataAsset skeletonDataAsset = sr.skeletonDataAsset; if (skeletonDataAsset != null) skeletonDataAssetsToReload.Add(skeletonDataAsset); @@ -79,7 +87,11 @@ namespace Spine.Unity.Editor { // by the instance of the ScriptableObject being destroyed but still assigned. // Here we save the skeletonGraphic.skeletonDataAsset asset path in order // to restore it later. +#if USE_FIND_OBJECTS_BY_TYPE + SkeletonGraphic[] activeSkeletonGraphics = GameObject.FindObjectsByType(FindObjectsSortMode.None); +#else SkeletonGraphic[] activeSkeletonGraphics = GameObject.FindObjectsOfType(); +#endif foreach (SkeletonGraphic skeletonGraphic in activeSkeletonGraphics) { SkeletonDataAsset skeletonDataAsset = skeletonGraphic.skeletonDataAsset; if (skeletonDataAsset != null) { @@ -106,12 +118,20 @@ namespace Spine.Unity.Editor { if (EditorApplication.isCompiling) return; if (EditorApplication.isPlayingOrWillChangePlaymode) return; +#if USE_FIND_OBJECTS_BY_TYPE + SkeletonRenderer[] activeSkeletonRenderers = GameObject.FindObjectsByType(FindObjectsSortMode.None); +#else SkeletonRenderer[] activeSkeletonRenderers = GameObject.FindObjectsOfType(); +#endif foreach (SkeletonRenderer renderer in activeSkeletonRenderers) { if (renderer.isActiveAndEnabled && renderer.skeletonDataAsset == skeletonDataAsset) renderer.Initialize(true); } +#if USE_FIND_OBJECTS_BY_TYPE + SkeletonGraphic[] activeSkeletonGraphics = GameObject.FindObjectsByType(FindObjectsSortMode.None); +#else SkeletonGraphic[] activeSkeletonGraphics = GameObject.FindObjectsOfType(); +#endif foreach (SkeletonGraphic graphic in activeSkeletonGraphics) { if (graphic.isActiveAndEnabled && graphic.skeletonDataAsset == skeletonDataAsset) graphic.Initialize(true); diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs index 4c8f56943..459fdbab6 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs @@ -39,6 +39,10 @@ #define NEWPLAYMODECALLBACKS #endif +#if UNITY_6000_3_OR_NEWER +#define GET_ASSET_PATH_USES_ENTITY_ID +#endif + using UnityEditor; using UnityEngine; @@ -104,7 +108,11 @@ namespace Spine.Unity.Editor { } public static bool IsSkeletonTexturePMA (Texture texture, string skeletonName, out bool detectionSucceeded) { +#if GET_ASSET_PATH_USES_ENTITY_ID + string texturePath = AssetDatabase.GetAssetPath(texture.GetEntityId()); +#else string texturePath = AssetDatabase.GetAssetPath(texture.GetInstanceID()); +#endif TextureImporter importer = (TextureImporter)TextureImporter.GetAtPath(texturePath); if (importer.alphaIsTransparency != importer.sRGBTexture) { Debug.LogWarning(string.Format("Texture '{0}' at skeleton '{1}' is neither configured correctly for " + diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 2c6d0ada0..987c3c35d 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core and examples. Spine Examples can be installed via the Samples tab.", - "version": "4.3.46", + "version": "4.3.47", "unity": "2018.3", "author": { "name": "Esoteric Software", @@ -14,7 +14,8 @@ "com.unity.modules.animation" : "1.0.0", "com.unity.modules.physics" : "1.0.0", "com.unity.modules.physics2d" : "1.0.0", - "com.esotericsoftware.spine.spine-csharp": "4.3.0" + "com.esotericsoftware.spine.spine-csharp": "4.3.0", + "com.unity.2d.sprite": "1.0.0" }, "repository": { "type": "git",