diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs index f6b6a201c..5dc439f82 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Components/SkeletonGraphicInspector.cs @@ -141,7 +141,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectMaterial(skeletonGraphic); + SkeletonGraphicUtility.DetectMaterial(skeletonGraphic); } } } @@ -165,7 +165,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectTintBlack(skeletonGraphic); + SkeletonGraphicUtility.DetectTintBlack(skeletonGraphic); } } } @@ -176,7 +176,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectCanvasGroupCompatible(skeletonGraphic); + SkeletonGraphicUtility.DetectCanvasGroupCompatible(skeletonGraphic); } } } @@ -187,7 +187,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectPMAVertexColors(skeletonGraphic); + SkeletonGraphicUtility.DetectPMAVertexColors(skeletonGraphic); } } } @@ -198,9 +198,9 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectTintBlack(skeletonGraphic); - DetectCanvasGroupCompatible(skeletonGraphic); - DetectPMAVertexColors(skeletonGraphic); + SkeletonGraphicUtility.DetectTintBlack(skeletonGraphic); + SkeletonGraphicUtility.DetectCanvasGroupCompatible(skeletonGraphic); + SkeletonGraphicUtility.DetectPMAVertexColors(skeletonGraphic); } } if (GUILayout.Button("Detect Material", EditorStyles.miniButton, GUILayout.Width(100f))) { @@ -208,7 +208,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectMaterial(skeletonGraphic); + SkeletonGraphicUtility.DetectMaterial(skeletonGraphic); } } } @@ -262,7 +262,7 @@ namespace Spine.Unity.Editor { foreach (UnityEngine.Object target in targets) { SkeletonGraphic skeletonGraphic = target as SkeletonGraphic; if (skeletonGraphic == null) continue; - DetectBlendModeMaterials(skeletonGraphic); + SkeletonGraphicUtility.DetectBlendModeMaterials(skeletonGraphic); } } EditorGUILayout.EndHorizontal(); @@ -284,7 +284,6 @@ namespace Spine.Unity.Editor { } } - // warning box if (isSeparationEnabledButNotMultipleRenderers) { using (new SpineInspectorUtility.BoxScope()) { @@ -371,158 +370,6 @@ namespace Spine.Unity.Editor { SpineHandles.DrawPivotOffsetHandle(skeletonGraphic, Color.green); } - #region Auto Detect Setting - static void DetectTintBlack (SkeletonGraphic skeletonGraphic) { - bool requiresTintBlack = HasTintBlackSlot(skeletonGraphic); - if (requiresTintBlack) - Debug.Log(string.Format("Found Tint-Black slot at '{0}'", skeletonGraphic)); - else - Debug.Log(string.Format("No Tint-Black slot found at '{0}'", skeletonGraphic)); - skeletonGraphic.MeshSettings.tintBlack = requiresTintBlack; - } - - static bool HasTintBlackSlot (SkeletonGraphic skeletonGraphic) { - SlotData[] slotsItems = skeletonGraphic.SkeletonData.Slots.Items; - for (int i = 0, count = skeletonGraphic.SkeletonData.Slots.Count; i < count; ++i) { - SlotData slotData = slotsItems[i]; - if (slotData.GetSetupPose().GetDarkColor().HasValue) - return true; - } - return false; - } - - static void DetectCanvasGroupCompatible (SkeletonGraphic skeletonGraphic) { - bool requiresCanvasGroupCompatible = IsBelowCanvasGroup(skeletonGraphic); - if (requiresCanvasGroupCompatible) - Debug.Log(string.Format("Skeleton is a child of CanvasGroup: '{0}'", skeletonGraphic)); - else - Debug.Log(string.Format("Skeleton is not a child of CanvasGroup: '{0}'", skeletonGraphic)); - skeletonGraphic.MeshSettings.canvasGroupCompatible = requiresCanvasGroupCompatible; - } - - static bool IsBelowCanvasGroup (SkeletonGraphic skeletonGraphic) { - return skeletonGraphic.gameObject.GetComponentInParent() != null; - } - - static void DetectPMAVertexColors (SkeletonGraphic skeletonGraphic) { - MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; - bool usesSpineShader = MaterialChecks.UsesSpineShader(skeletonGraphic.material); - if (!usesSpineShader) { - Debug.Log(string.Format("Skeleton is not using a Spine shader, thus the shader is likely " + - "not using PMA vertex color: '{0}'", skeletonGraphic)); - skeletonGraphic.MeshSettings.pmaVertexColors = false; - return; - } - - bool requiresPMAVertexColorsDisabled = settings.canvasGroupCompatible && !settings.tintBlack; - if (requiresPMAVertexColorsDisabled) { - Debug.Log(string.Format("Skeleton requires PMA Vertex Colors disabled: '{0}'", skeletonGraphic)); - skeletonGraphic.MeshSettings.pmaVertexColors = false; - } else { - Debug.Log(string.Format("Skeleton requires or permits PMA Vertex Colors enabled: '{0}'", skeletonGraphic)); - skeletonGraphic.MeshSettings.pmaVertexColors = true; - } - } - - static bool IsSkeletonTexturePMA (SkeletonGraphic skeletonGraphic, out bool detectionSucceeded) { - Texture texture = skeletonGraphic.mainTexture; - string texturePath = AssetDatabase.GetAssetPath(texture.GetInstanceID()); - 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 " + - "PMA nor Straight Alpha.", texture, skeletonGraphic), texture); - detectionSucceeded = false; - return false; - } - detectionSucceeded = true; - bool isPMATexture = !importer.alphaIsTransparency && !importer.sRGBTexture; - return isPMATexture; - } - - static void DetectMaterial (SkeletonGraphic skeletonGraphic) { - MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; - - bool detectionSucceeded; - bool usesPMATexture = IsSkeletonTexturePMA(skeletonGraphic, out detectionSucceeded); - if (!detectionSucceeded) { - Debug.LogWarning(string.Format("Unable to assign Material for skeleton '{0}'.", skeletonGraphic), skeletonGraphic); - return; - } - - Material newMaterial = null; - if (usesPMATexture) { - if (settings.tintBlack) { - if (settings.canvasGroupCompatible) - newMaterial = MaterialWithName("SkeletonGraphicTintBlack-CanvasGroup"); - else - newMaterial = MaterialWithName("SkeletonGraphicTintBlack"); - } else { // not tintBlack - if (settings.canvasGroupCompatible) - newMaterial = MaterialWithName("SkeletonGraphicDefault-CanvasGroup"); - else - newMaterial = MaterialWithName("SkeletonGraphicDefault"); - } - } else { // straight alpha texture - if (settings.tintBlack) { - if (settings.canvasGroupCompatible) - newMaterial = MaterialWithName("SkeletonGraphicTintBlack-CanvasGroupStraight"); - else - newMaterial = MaterialWithName("SkeletonGraphicTintBlack-Straight"); - } else { // not tintBlack - if (settings.canvasGroupCompatible) - newMaterial = MaterialWithName("SkeletonGraphicDefault-CanvasGroupStraight"); - else - newMaterial = MaterialWithName("SkeletonGraphicDefault-Straight"); - } - } - if (newMaterial != null) { - Debug.Log(string.Format("Assigning material '{0}' at skeleton '{1}'", - newMaterial, skeletonGraphic), newMaterial); - skeletonGraphic.material = newMaterial; - } - } - - static void DetectBlendModeMaterials (SkeletonGraphic skeletonGraphic) { - bool detectionSucceeded; - bool usesPMATexture = IsSkeletonTexturePMA(skeletonGraphic, out detectionSucceeded); - if (!detectionSucceeded) { - Debug.LogWarning(string.Format("Unable to assign Blend Mode materials for skeleton '{0}'.", skeletonGraphic), skeletonGraphic); - return; - } - DetectBlendModeMaterial(skeletonGraphic, BlendMode.Additive, usesPMATexture); - DetectBlendModeMaterial(skeletonGraphic, BlendMode.Multiply, usesPMATexture); - DetectBlendModeMaterial(skeletonGraphic, BlendMode.Screen, usesPMATexture); - } - - static void DetectBlendModeMaterial (SkeletonGraphic skeletonGraphic, BlendMode blendMode, bool usesPMATexture) { - MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; - - string optionalTintBlack = settings.tintBlack ? "TintBlack" : ""; - string blendModeString = blendMode.ToString(); - string optionalDash = settings.canvasGroupCompatible || !usesPMATexture ? "-" : ""; - string optionalCanvasGroup = settings.canvasGroupCompatible ? "CanvasGroup" : ""; - string optionalStraight = !usesPMATexture ? "Straight" : ""; - - string materialName = string.Format("SkeletonGraphic{0}{1}{2}{3}{4}", - optionalTintBlack, blendModeString, optionalDash, optionalCanvasGroup, optionalStraight); - Material newMaterial = MaterialWithName(materialName); - - if (newMaterial != null) { - switch (blendMode) { - case BlendMode.Additive: - skeletonGraphic.additiveMaterial = newMaterial; - break; - case BlendMode.Multiply: - skeletonGraphic.multiplyMaterial = newMaterial; - break; - case BlendMode.Screen: - skeletonGraphic.screenMaterial = newMaterial; - break; - } - } - } - #endregion - #region Menus [MenuItem("CONTEXT/SkeletonGraphic/Match RectTransform with Mesh Bounds")] static void MatchRectTransformWithBounds (MenuCommand command) { @@ -599,10 +446,10 @@ namespace Spine.Unity.Editor { EditorInstantiation.AddComponent(go, true, animationComponentType); SkeletonGraphic graphic = go.GetComponent(); - graphic.material = SkeletonGraphicInspector.DefaultSkeletonGraphicMaterial; - graphic.additiveMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicAdditiveMaterial; - graphic.multiplyMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicMultiplyMaterial; - graphic.screenMaterial = SkeletonGraphicInspector.DefaultSkeletonGraphicScreenMaterial; + graphic.material = SkeletonGraphicUtility.DefaultSkeletonGraphicMaterial; + graphic.additiveMaterial = SkeletonGraphicUtility.DefaultSkeletonGraphicAdditiveMaterial; + graphic.multiplyMaterial = SkeletonGraphicUtility.DefaultSkeletonGraphicMultiplyMaterial; + graphic.screenMaterial = SkeletonGraphicUtility.DefaultSkeletonGraphicScreenMaterial; #if HAS_CULL_TRANSPARENT_MESH CanvasRenderer canvasRenderer = go.GetComponent(); @@ -610,62 +457,6 @@ namespace Spine.Unity.Editor { #endif return go; } - - public static Material DefaultSkeletonGraphicMaterial { - get { - return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? - "SkeletonGraphicDefault" : - "SkeletonGraphicDefault-Straight"); - } - } - - public static Material DefaultSkeletonGraphicAdditiveMaterial { - get { - return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? - "SkeletonGraphicAdditive" : - "SkeletonGraphicAdditive-Straight"); - } - } - - public static Material DefaultSkeletonGraphicMultiplyMaterial { - get { - return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? - "SkeletonGraphicMultiply" : - "SkeletonGraphicMultiply-Straight"); - } - } - - public static Material DefaultSkeletonGraphicScreenMaterial { - get { - return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? - "SkeletonGraphicScreen" : - "SkeletonGraphicScreen-Straight"); - } - } - - protected static Material MaterialWithName (string name) { - string[] guids = AssetDatabase.FindAssets(name + " t:material"); - if (guids.Length <= 0) return null; - - int closestNameDistance = int.MaxValue; - int closestNameIndex = 0; - for (int i = 0; i < guids.Length; ++i) { - string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]); - string assetName = System.IO.Path.GetFileNameWithoutExtension(assetPath); - int distance = string.CompareOrdinal(assetName, name); - if (distance < closestNameDistance) { - closestNameDistance = distance; - closestNameIndex = i; - } - } - - string foundAssetPath = AssetDatabase.GUIDToAssetPath(guids[closestNameIndex]); - if (string.IsNullOrEmpty(foundAssetPath)) return null; - - Material firstMaterial = AssetDatabase.LoadAssetAtPath(foundAssetPath); - return firstMaterial; - } - #endregion } } 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 new file mode 100644 index 000000000..ab7eef85c --- /dev/null +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs @@ -0,0 +1,257 @@ +/****************************************************************************** + * Spine Runtimes License Agreement + * Last updated April 5, 2025. Replaces all prior versions. + * + * Copyright (c) 2013-2025, Esoteric Software LLC + * + * Integration of the Spine Runtimes into software or otherwise creating + * derivative works of the Spine Runtimes is permitted under the terms and + * conditions of Section 2 of the Spine Editor License Agreement: + * http://esotericsoftware.com/spine-editor-license + * + * Otherwise, it is permitted to integrate the Spine Runtimes into software + * or otherwise create derivative works of the Spine Runtimes (collectively, + * "Products"), provided that each user of the Products must obtain their own + * Spine Editor license and redistribution of the Products in any form must + * include this license and copyright notice. + * + * THE SPINE RUNTIMES ARE PROVIDED BY ESOTERIC SOFTWARE LLC "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL ESOTERIC SOFTWARE LLC BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, + * BUSINESS INTERRUPTION, OR LOSS OF USE, DATA, OR PROFITS) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THE SPINE RUNTIMES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +#if UNITY_2018_3 || UNITY_2019 || UNITY_2018_3_OR_NEWER +#define NEW_PREFAB_SYSTEM +#endif + +#if UNITY_2018_2_OR_NEWER +#define HAS_CULL_TRANSPARENT_MESH +#endif + +#if UNITY_2017_2_OR_NEWER +#define NEWPLAYMODECALLBACKS +#endif + +using UnityEditor; +using UnityEngine; + +namespace Spine.Unity.Editor { + + public static class SkeletonGraphicUtility { + #region Auto Detect Setting + public static void DetectTintBlack (SkeletonGraphic skeletonGraphic) { + bool requiresTintBlack = HasTintBlackSlot(skeletonGraphic); + if (requiresTintBlack) + Debug.Log(string.Format("Found Tint-Black slot at '{0}'", skeletonGraphic)); + else + Debug.Log(string.Format("No Tint-Black slot found at '{0}'", skeletonGraphic)); + skeletonGraphic.MeshSettings.tintBlack = requiresTintBlack; + } + + public static bool HasTintBlackSlot (SkeletonGraphic skeletonGraphic) { + SlotData[] slotsItems = skeletonGraphic.SkeletonData.Slots.Items; + for (int i = 0, count = skeletonGraphic.SkeletonData.Slots.Count; i < count; ++i) { + SlotData slotData = slotsItems[i]; + if (slotData.GetSetupPose().GetDarkColor().HasValue) + return true; + } + return false; + } + + public static void DetectCanvasGroupCompatible (SkeletonGraphic skeletonGraphic) { + bool requiresCanvasGroupCompatible = IsBelowCanvasGroup(skeletonGraphic); + if (requiresCanvasGroupCompatible) + Debug.Log(string.Format("Skeleton is a child of CanvasGroup: '{0}'", skeletonGraphic)); + else + Debug.Log(string.Format("Skeleton is not a child of CanvasGroup: '{0}'", skeletonGraphic)); + skeletonGraphic.MeshSettings.canvasGroupCompatible = requiresCanvasGroupCompatible; + } + + public static bool IsBelowCanvasGroup (SkeletonGraphic skeletonGraphic) { + return skeletonGraphic.gameObject.GetComponentInParent() != null; + } + + public static void DetectPMAVertexColors (SkeletonGraphic skeletonGraphic) { + MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; + bool usesSpineShader = MaterialChecks.UsesSpineShader(skeletonGraphic.material); + if (!usesSpineShader) { + Debug.Log(string.Format("Skeleton is not using a Spine shader, thus the shader is likely " + + "not using PMA vertex color: '{0}'", skeletonGraphic)); + skeletonGraphic.MeshSettings.pmaVertexColors = false; + return; + } + + bool requiresPMAVertexColorsDisabled = settings.canvasGroupCompatible && !settings.tintBlack; + if (requiresPMAVertexColorsDisabled) { + Debug.Log(string.Format("Skeleton requires PMA Vertex Colors disabled: '{0}'", skeletonGraphic)); + skeletonGraphic.MeshSettings.pmaVertexColors = false; + } else { + Debug.Log(string.Format("Skeleton requires or permits PMA Vertex Colors enabled: '{0}'", skeletonGraphic)); + skeletonGraphic.MeshSettings.pmaVertexColors = true; + } + } + + public static bool IsSkeletonTexturePMA (SkeletonGraphic skeletonGraphic, out bool detectionSucceeded) { + Texture texture = skeletonGraphic.mainTexture; + string texturePath = AssetDatabase.GetAssetPath(texture.GetInstanceID()); + 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 " + + "PMA nor Straight Alpha.", texture, skeletonGraphic), texture); + detectionSucceeded = false; + return false; + } + detectionSucceeded = true; + bool isPMATexture = !importer.alphaIsTransparency && !importer.sRGBTexture; + return isPMATexture; + } + + public static void DetectMaterial (SkeletonGraphic skeletonGraphic) { + MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; + + bool detectionSucceeded; + bool usesPMATexture = IsSkeletonTexturePMA(skeletonGraphic, out detectionSucceeded); + if (!detectionSucceeded) { + Debug.LogWarning(string.Format("Unable to assign Material for skeleton '{0}'.", skeletonGraphic), skeletonGraphic); + return; + } + + Material newMaterial = null; + if (usesPMATexture) { + if (settings.tintBlack) { + if (settings.canvasGroupCompatible) + newMaterial = MaterialWithName("SkeletonGraphicTintBlack-CanvasGroup"); + else + newMaterial = MaterialWithName("SkeletonGraphicTintBlack"); + } else { // not tintBlack + if (settings.canvasGroupCompatible) + newMaterial = MaterialWithName("SkeletonGraphicDefault-CanvasGroup"); + else + newMaterial = MaterialWithName("SkeletonGraphicDefault"); + } + } else { // straight alpha texture + if (settings.tintBlack) { + if (settings.canvasGroupCompatible) + newMaterial = MaterialWithName("SkeletonGraphicTintBlack-CanvasGroupStraight"); + else + newMaterial = MaterialWithName("SkeletonGraphicTintBlack-Straight"); + } else { // not tintBlack + if (settings.canvasGroupCompatible) + newMaterial = MaterialWithName("SkeletonGraphicDefault-CanvasGroupStraight"); + else + newMaterial = MaterialWithName("SkeletonGraphicDefault-Straight"); + } + } + if (newMaterial != null) { + Debug.Log(string.Format("Assigning material '{0}' at skeleton '{1}'", + newMaterial, skeletonGraphic), newMaterial); + skeletonGraphic.material = newMaterial; + } + } + + public static void DetectBlendModeMaterials (SkeletonGraphic skeletonGraphic) { + bool detectionSucceeded; + bool usesPMATexture = IsSkeletonTexturePMA(skeletonGraphic, out detectionSucceeded); + if (!detectionSucceeded) { + Debug.LogWarning(string.Format("Unable to assign Blend Mode materials for skeleton '{0}'.", skeletonGraphic), skeletonGraphic); + return; + } + DetectBlendModeMaterial(skeletonGraphic, BlendMode.Additive, usesPMATexture); + DetectBlendModeMaterial(skeletonGraphic, BlendMode.Multiply, usesPMATexture); + DetectBlendModeMaterial(skeletonGraphic, BlendMode.Screen, usesPMATexture); + } + + public static void DetectBlendModeMaterial (SkeletonGraphic skeletonGraphic, BlendMode blendMode, bool usesPMATexture) { + MeshGenerator.Settings settings = skeletonGraphic.MeshSettings; + + string optionalTintBlack = settings.tintBlack ? "TintBlack" : ""; + string blendModeString = blendMode.ToString(); + string optionalDash = settings.canvasGroupCompatible || !usesPMATexture ? "-" : ""; + string optionalCanvasGroup = settings.canvasGroupCompatible ? "CanvasGroup" : ""; + string optionalStraight = !usesPMATexture ? "Straight" : ""; + + string materialName = string.Format("SkeletonGraphic{0}{1}{2}{3}{4}", + optionalTintBlack, blendModeString, optionalDash, optionalCanvasGroup, optionalStraight); + Material newMaterial = MaterialWithName(materialName); + + if (newMaterial != null) { + switch (blendMode) { + case BlendMode.Additive: + skeletonGraphic.additiveMaterial = newMaterial; + break; + case BlendMode.Multiply: + skeletonGraphic.multiplyMaterial = newMaterial; + break; + case BlendMode.Screen: + skeletonGraphic.screenMaterial = newMaterial; + break; + } + } + } + #endregion Auto Detect Setting + + #region Material Defaults + public static Material DefaultSkeletonGraphicMaterial { + get { + return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? + "SkeletonGraphicDefault" : + "SkeletonGraphicDefault-Straight"); + } + } + + public static Material DefaultSkeletonGraphicAdditiveMaterial { + get { + return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? + "SkeletonGraphicAdditive" : + "SkeletonGraphicAdditive-Straight"); + } + } + + public static Material DefaultSkeletonGraphicMultiplyMaterial { + get { + return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? + "SkeletonGraphicMultiply" : + "SkeletonGraphicMultiply-Straight"); + } + } + + public static Material DefaultSkeletonGraphicScreenMaterial { + get { + return MaterialWithName(SpineEditorUtilities.Preferences.UsesPMAWorkflow ? + "SkeletonGraphicScreen" : + "SkeletonGraphicScreen-Straight"); + } + } + + public static Material MaterialWithName (string name) { + string[] guids = AssetDatabase.FindAssets(name + " t:material"); + if (guids.Length <= 0) return null; + + int closestNameDistance = int.MaxValue; + int closestNameIndex = 0; + for (int i = 0; i < guids.Length; ++i) { + string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]); + string assetName = System.IO.Path.GetFileNameWithoutExtension(assetPath); + int distance = string.CompareOrdinal(assetName, name); + if (distance < closestNameDistance) { + closestNameDistance = distance; + closestNameIndex = i; + } + } + + string foundAssetPath = AssetDatabase.GUIDToAssetPath(guids[closestNameIndex]); + if (string.IsNullOrEmpty(foundAssetPath)) return null; + + Material firstMaterial = AssetDatabase.LoadAssetAtPath(foundAssetPath); + return firstMaterial; + } + #endregion Material Defaults + } +} diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs.meta b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs.meta new file mode 100644 index 000000000..1440dca01 --- /dev/null +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/Utility/SkeletonGraphicUtility.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ebf35b4e85d2ae94c9bc9775a8324697 \ No newline at end of file diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index b5e4b5e6b..4e6b8674f 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.23", + "version": "4.3.24", "unity": "2018.3", "author": { "name": "Esoteric Software",