From 030b2854f5fccecfa3d3a7c39f0dadb745055c12 Mon Sep 17 00:00:00 2001 From: Harald Csaszar Date: Wed, 24 Jan 2024 12:50:27 +0100 Subject: [PATCH] [unity] Fixed SpineBuildPreprocessor pre-build order on Unity 2021.2 and newer (using BuildPlayerProcessor). See #1890. --- .../Editor/Utility/SpineBuildProcessor.cs | 39 ++++++++++++++----- spine-unity/Assets/Spine/package.json | 2 +- 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs index 5d0f33aeb..7a3dd7084 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SpineBuildProcessor.cs @@ -31,6 +31,10 @@ #define HAS_BUILD_PROCESS_WITH_REPORT #endif +#if UNITY_2021_2_OR_NEWER +#define HAS_BUILD_PLAYER_PROCESSOR +#endif + #if UNITY_2020_2_OR_NEWER #define HAS_ON_POSTPROCESS_PREFAB #endif @@ -258,26 +262,43 @@ namespace Spine.Unity.Editor { } } - public class SpineBuildPreprocessor : -#if HAS_BUILD_PROCESS_WITH_REPORT - IPreprocessBuildWithReport -#else - IPreprocessBuild -#endif - { +#if HAS_BUILD_PLAYER_PROCESSOR + /// + /// Build Preprocessor for Unity 2021.2 and newer. + /// Unfortunately BuildPlayerProcessors seem to be executed before IPreprocessBuildWithReport regardless of + /// callbackOrder, thus requiring use of this base class to call pre-build hooks before Addressables or + /// Asset Bundles are built. + /// + public class SpineBuildPreprocessor : UnityEditor.Build.BuildPlayerProcessor { + public override int callbackOrder { + get { return -2000; } + } + + public override void PrepareForBuild (BuildPlayerContext buildPlayerContext) { + SpineBuildProcessor.PreprocessBuild(); + } + } +#elif HAS_BUILD_PROCESS_WITH_REPORT + public class SpineBuildPreprocessor : IPreprocessBuildWithReport { public int callbackOrder { get { return -2000; } } -#if HAS_BUILD_PROCESS_WITH_REPORT + void IPreprocessBuildWithReport.OnPreprocessBuild (BuildReport report) { SpineBuildProcessor.PreprocessBuild(); } + } #else + public class SpineBuildPreprocessor : IPreprocessBuild { + public int callbackOrder { + get { return -2000; } + } + void IPreprocessBuild.OnPreprocessBuild (BuildTarget target, string path) { SpineBuildProcessor.PreprocessBuild(); } -#endif } +#endif public class SpineBuildPostprocessor : #if HAS_BUILD_PROCESS_WITH_REPORT diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 0c4ebeddf..8bfdb2498 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.", - "version": "4.2.44", + "version": "4.2.45", "unity": "2018.3", "author": { "name": "Esoteric Software",