diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs index f9c9ab1d5..6b2b8c9b5 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/Editor/SkeletonGraphicInspector.cs @@ -13,7 +13,7 @@ public class SkeletonGraphicInspector : Editor { SerializedProperty material_, color_; SerializedProperty skeletonDataAsset_, initialSkinName_; SerializedProperty startingAnimation_, startingLoop_, timeScale_, freeze_; - #if !PREUNITY_5_2 +#if !PREUNITY_5_2 SerializedProperty raycastTarget_; SkeletonGraphic thisSkeletonGraphic; @@ -38,17 +38,12 @@ public class SkeletonGraphicInspector : Editor { freeze_ = so.FindProperty("freeze"); } - public override void OnInspectorGUI () { - - var s = thisSkeletonGraphic; - s.skeletonDataAsset = SkeletonGraphicInspector.ObjectField(skeletonDataAsset_); - s.material = SkeletonGraphicInspector.ObjectField(material_); - EditorGUI.BeginChangeCheck(); - thisSkeletonGraphic.color = EditorGUILayout.ColorField(color_.displayName, color_.colorValue); - if (EditorGUI.EndChangeCheck()) - SkeletonGraphicInspector.ForceUpdateHack(thisSkeletonGraphic.transform); + + EditorGUILayout.PropertyField(skeletonDataAsset_); + EditorGUILayout.PropertyField(material_); + EditorGUILayout.PropertyField(color_); if (thisSkeletonGraphic.skeletonDataAsset == null) { EditorGUILayout.HelpBox("You need to assign a SkeletonDataAsset first.", MessageType.Info); @@ -62,49 +57,34 @@ public class SkeletonGraphicInspector : Editor { EditorGUILayout.Space(); EditorGUILayout.LabelField("Animation", EditorStyles.boldLabel); EditorGUILayout.PropertyField(startingAnimation_); - s.startingLoop = SkeletonGraphicInspector.BoolField(startingLoop_); - s.timeScale = EditorGUILayout.FloatField(timeScale_.displayName, timeScale_.floatValue); + EditorGUILayout.PropertyField(startingLoop_); + EditorGUILayout.PropertyField(timeScale_); EditorGUILayout.Space(); - s.freeze = SkeletonGraphicInspector.BoolField(freeze_); + EditorGUILayout.PropertyField(freeze_); EditorGUILayout.Space(); EditorGUILayout.LabelField("UI", EditorStyles.boldLabel); - s.raycastTarget = SkeletonGraphicInspector.BoolField(raycastTarget_); + EditorGUILayout.PropertyField(raycastTarget_); - } + bool wasChanged = EditorGUI.EndChangeCheck(); - #region HAX - Thanks, Unity - // colors weren't updating in realtime in the custom inspector. - // Why the hell do I have to do this?? - /// Use this when scene repaint and proper explicit update methods don't work. - public static void ForceUpdateHack (Transform t) { - var origValue = t.localScale; - t.localScale = new Vector3(11f, 22f, 33f); - t.localScale = origValue; + if (wasChanged) { + serializedObject.ApplyModifiedProperties(); + } } - // Hack for Unity 5.3 problem with PropertyField - public static T ObjectField (SerializedProperty property) where T : UnityEngine.Object { - return (T)EditorGUILayout.ObjectField(property.displayName, property.objectReferenceValue, typeof(T), false); - } - - public static bool BoolField (SerializedProperty property) { - return EditorGUILayout.Toggle(property.displayName, property.boolValue); - } - #endregion - #region Menus - [MenuItem ("CONTEXT/SkeletonGraphic/Match RectTransform with Mesh Bounds")] + [MenuItem("CONTEXT/SkeletonGraphic/Match RectTransform with Mesh Bounds")] static void MatchRectTransformWithBounds (MenuCommand command) { var skeletonGraphic = (SkeletonGraphic)command.context; - var mesh = skeletonGraphic.SpineMeshGenerator.LastGeneratedMesh; + var mesh = skeletonGraphic.SpineMeshGenerator.LastGeneratedMesh; var bounds = mesh.bounds; var size = bounds.size; var center = bounds.center; var p = new Vector2( - 0.5f - (center.x / size.x), - 0.5f - (center.y / size.y) - ); + 0.5f - (center.x / size.x), + 0.5f - (center.y / size.y) + ); skeletonGraphic.rectTransform.sizeDelta = size; skeletonGraphic.rectTransform.pivot = p; @@ -112,8 +92,12 @@ public class SkeletonGraphicInspector : Editor { public static Material DefaultSkeletonGraphicMaterial { get { - var guids = AssetDatabase.FindAssets("SkeletonGraphicDefault t:material"); if (guids.Length <= 0) return null; - var firstAssetPath = AssetDatabase.GUIDToAssetPath(guids[0]); if (string.IsNullOrEmpty(firstAssetPath)) return null; + var guids = AssetDatabase.FindAssets("SkeletonGraphicDefault t:material"); + if (guids.Length <= 0) + return null; + var firstAssetPath = AssetDatabase.GUIDToAssetPath(guids[0]); + if (string.IsNullOrEmpty(firstAssetPath)) + return null; var firstMaterial = AssetDatabase.LoadAssetAtPath(firstAssetPath); return firstMaterial; } @@ -204,6 +188,8 @@ public class SkeletonGraphicInspector : Editor { graphic.material = SkeletonGraphicInspector.DefaultSkeletonGraphicMaterial; return go; } + #endregion - #endif + +#endif } diff --git a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs index 32cf70734..778495f65 100644 --- a/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs +++ b/spine-unity/Assets/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs @@ -89,6 +89,10 @@ public class SkeletonGraphic : MaskableGraphic { protected override void Reset () { base.Reset(); + if (canvas == null) { + Debug.LogWarningFormat("SkeletonGraphic requires a Canvas to be visible. Move this GameObject ({0}) in the Hierarchy so it becomes a child of a Canvas.", gameObject.name); + } + if (material == null || material.shader != Shader.Find("Spine/SkeletonGraphic (Premultiply Alpha)")) { Debug.LogWarning("SkeletonGraphic works best with the SkeletonGraphic material."); }