From 12110a72caa957e1cfbdd34f230c4f326151fb6e Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Sat, 7 Feb 2015 01:46:56 -0800 Subject: [PATCH 1/6] Updated gitignore to include spine-csharp/src/ .cs.meta files to make symdir linking easier for Unity projects --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index a828f2014..95de41fbe 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ spine-cocos2d-iphone/3/cocos2d/* spine-csharp/bin spine-csharp/obj +spine-csharp/src/*.cs.meta spine-monogame/xamarinstudio-ios/src/bin spine-monogame/xamarinstudio-ios/src/obj From 366cbaf0c3a87fba05d3b491b22f406741e090e9 Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Sat, 7 Feb 2015 01:48:05 -0800 Subject: [PATCH 2/6] Updated SkeletonUtilityBone to handle FlipX better by scaling Z in follow mode when world flipped. --- .../Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs index 99c561499..dc42d4677 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs @@ -172,7 +172,7 @@ public class SkeletonUtilityBone : MonoBehaviour { } if (scale) { - cachedTransform.localScale = new Vector3(bone.scaleX, bone.scaleY, 1); + cachedTransform.localScale = new Vector3(bone.scaleX, bone.scaleY, bone.worldFlipX ? -1 : 1); nonUniformScaleWarning = (bone.scaleX != bone.scaleY); } @@ -206,6 +206,7 @@ public class SkeletonUtilityBone : MonoBehaviour { } bone.Rotation = angle; + bone.RotationIK = angle; } if (scale) { @@ -245,6 +246,7 @@ public class SkeletonUtilityBone : MonoBehaviour { } bone.Rotation = angle; + bone.RotationIK = angle; } //TODO: Something about this From 39e754315eb661776a3f11c817944f95a87bfd5e Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Tue, 17 Feb 2015 16:20:57 -0800 Subject: [PATCH 3/6] Added SkeletonAnimator Changed SkeletonAnimation delegates to pass SkeletonRenderer instead of SkeletonAnimation Refactored how delegates/events work a bit in SkeletonAnimation by implementing ISkeletonAnimation interface. --- .../Examples/Scripts/DynamicSpineBone.cs | 2 +- .../Assets/Examples/Scripts/Goblins.cs | 2 +- .../Editor/SkeletonAnimatorInspector.cs | 55 +++++ .../Editor/SkeletonAnimatorInspector.cs.meta | 8 + .../spine-unity/Editor/SkeletonBaker.cs | 103 +++++++++- .../Editor/SkeletonDataAssetInspector.cs | 60 ++++-- .../Editor/SpineEditorUtilities.cs | 189 +++++++++++++----- .../Assets/spine-unity/SkeletonAnimation.cs | 38 +++- .../spine-unity/SkeletonAnimationInterface.cs | 11 + .../SkeletonAnimationInterface.cs.meta | 8 + .../Assets/spine-unity/SkeletonAnimator.cs | 100 +++++++++ .../spine-unity/SkeletonAnimator.cs.meta | 8 + .../Assets/spine-unity/SkeletonDataAsset.cs | 15 +- .../SkeletonUtility/SkeletonUtility.cs | 12 +- 14 files changed, 513 insertions(+), 98 deletions(-) create mode 100644 spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs create mode 100644 spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta create mode 100644 spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs create mode 100644 spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta create mode 100644 spine-unity/Assets/spine-unity/SkeletonAnimator.cs create mode 100644 spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta diff --git a/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs b/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs index c638f696e..6fa3ea5be 100644 --- a/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs +++ b/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs @@ -50,7 +50,7 @@ public class DynamicSpineBone : MonoBehaviour { lastPosition = speedReference.position; } - void UpdateLocal(SkeletonAnimation animation) { + void UpdateLocal(SkeletonRenderer renderer) { Vector3 vec = useAcceleration ? acceleration : velocity; if (Mathf.Abs(vec.x) < returnThreshhold) diff --git a/spine-unity/Assets/Examples/Scripts/Goblins.cs b/spine-unity/Assets/Examples/Scripts/Goblins.cs index bf3a78079..56a54007c 100644 --- a/spine-unity/Assets/Examples/Scripts/Goblins.cs +++ b/spine-unity/Assets/Examples/Scripts/Goblins.cs @@ -44,7 +44,7 @@ public class Goblins : MonoBehaviour { } // This is called after the animation is applied to the skeleton and can be used to adjust the bones dynamically. - public void UpdateLocal (SkeletonAnimation skeletonAnimation) { + public void UpdateLocal (SkeletonRenderer skeletonRenderer) { headBone.Rotation += 15; } diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs new file mode 100644 index 000000000..dfbac484c --- /dev/null +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs @@ -0,0 +1,55 @@ +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.1 + * + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to install, execute and perform the Spine Runtimes + * Software (the "Software") solely for internal use. Without the written + * permission of Esoteric Software (typically granted by licensing Spine), you + * may not (a) modify, translate, adapt or otherwise create derivative works, + * improvements of the Software or develop new applications using the Software + * or (b) remove, delete, alter or obscure any trademarks or any copyright, + * trademark, patent or other intellectual property or proprietary rights + * notices on or in the Software, including any copy thereof. Redistributions + * in binary or source form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "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 SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ +using System; +using UnityEditor; +using UnityEngine; +using Spine; + +[CustomEditor(typeof(SkeletonAnimator))] +public class SkeletonAnimatorInspector : SkeletonRendererInspector { + protected SerializedProperty animationName, loop, timeScale; + protected bool isPrefab; + + protected override void OnEnable () { + base.OnEnable(); + animationName = serializedObject.FindProperty("_animationName"); + loop = serializedObject.FindProperty("loop"); + timeScale = serializedObject.FindProperty("timeScale"); + + if (PrefabUtility.GetPrefabType(this.target) == PrefabType.Prefab) + isPrefab = true; + + + } + + protected override void gui () { + base.gui(); + } +} diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta new file mode 100644 index 000000000..35b472565 --- /dev/null +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6a9ca5213a3a4614c9a9f2e60909bc33 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs index 2e02866b5..8eddefd85 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs @@ -39,6 +39,7 @@ using System.Collections; using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.IO; using Spine; @@ -172,7 +173,7 @@ public static class SkeletonBaker { bool newPrefab = false; string prefabPath = outputPath + "/" + skeletonDataAsset.skeletonJSON.name + " (" + skin.Name + ").prefab"; - + Object prefab = AssetDatabase.LoadAssetAtPath(prefabPath, typeof(GameObject)); if (prefab == null) { @@ -330,7 +331,7 @@ public static class SkeletonBaker { animator.runtimeAnimatorController = (RuntimeAnimatorController)controller; EditorGUIUtility.PingObject(controller); } - + if (newPrefab) { PrefabUtility.ReplacePrefab(prefabRoot, prefab, ReplacePrefabOptions.ConnectToPrefab); @@ -353,6 +354,92 @@ public static class SkeletonBaker { } + public static void GenerateMecanimAnimationClips (SkeletonDataAsset skeletonDataAsset) { + var data = skeletonDataAsset.GetSkeletonData(true); + if (data == null) { + Debug.LogError("SkeletonData failed!", skeletonDataAsset); + return; + } + + string dataPath = AssetDatabase.GetAssetPath(skeletonDataAsset); + string controllerPath = dataPath.Replace("_SkeletonData", "_Controller").Replace(".asset", ".controller"); + + + + AnimatorController controller; + + if (skeletonDataAsset.controller != null) { + controller = (AnimatorController)skeletonDataAsset.controller; + } else { + if (File.Exists(controllerPath)) { + if (EditorUtility.DisplayDialog("Controller Overwrite Warning", "Unknown Controller already exists at: " + controllerPath, "Update", "Overwrite")) { + controller = (AnimatorController)AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController)); + } else { + controller = (AnimatorController)AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + } + } else { + controller = (AnimatorController)AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + } + + } + + skeletonDataAsset.controller = controller; + EditorUtility.SetDirty(skeletonDataAsset); + + Object[] objs = AssetDatabase.LoadAllAssetsAtPath(controllerPath); + + Dictionary clipTable = new Dictionary(); + Dictionary animTable = new Dictionary(); + + foreach (var o in objs) { + if (o is AnimationClip) { + clipTable.Add(o.name, (AnimationClip)o); + } + } + + foreach (var anim in data.Animations) { + string name = anim.Name; + animTable.Add(name, anim); + + if (clipTable.ContainsKey(name) == false) { + //generate new dummy clip + AnimationClip newClip = new AnimationClip(); + newClip.name = name; + AnimationUtility.SetAnimationType(newClip, ModelImporterAnimationType.Generic); + AssetDatabase.AddObjectToAsset(newClip, controller); + clipTable.Add(name, newClip); + } + + AnimationClip clip = clipTable[name]; + + clip.SetCurve("", typeof(GameObject), "dummy", AnimationCurve.Linear(0, 0, anim.Duration, 0)); + var settings = AnimationUtility.GetAnimationClipSettings(clip); + settings.stopTime = anim.Duration; + + SetAnimationSettings(clip, settings); + + AnimationUtility.SetAnimationEvents(clip, new AnimationEvent[0]); + + foreach (Timeline t in anim.Timelines) { + if (t is EventTimeline) { + ParseEventTimeline((EventTimeline)t, clip, SendMessageOptions.DontRequireReceiver); + } + } + + EditorUtility.SetDirty(clip); + + clipTable.Remove(name); + } + + //clear no longer used animations + foreach (var clip in clipTable.Values) { + AnimationClip.DestroyImmediate(clip, true); + } + + AssetDatabase.Refresh(); + AssetDatabase.SaveAssets(); + } + static Bone extractionBone; static Slot extractionSlot; @@ -656,7 +743,7 @@ public static class SkeletonBaker { static AnimationClip ExtractAnimation (string name, SkeletonData skeletonData, Dictionary> slotLookup, bool bakeIK, SendMessageOptions eventOptions, AnimationClip clip = null) { var animation = skeletonData.FindAnimation(name); - + var timelines = animation.Timelines; if (clip == null) { @@ -709,7 +796,7 @@ public static class SkeletonBaker { } else if (t is AttachmentTimeline) { ParseAttachmentTimeline(skeleton, (AttachmentTimeline)t, slotLookup, clip); } else if (t is EventTimeline) { - ParseEventTimeline(skeleton, (EventTimeline)t, clip, eventOptions); + ParseEventTimeline((EventTimeline)t, clip, eventOptions); } } @@ -741,7 +828,7 @@ public static class SkeletonBaker { } } - static void ParseEventTimeline (Skeleton skeleton, EventTimeline timeline, AnimationClip clip, SendMessageOptions eventOptions) { + static void ParseEventTimeline (EventTimeline timeline, AnimationClip clip, SendMessageOptions eventOptions) { float[] frames = timeline.Frames; var events = timeline.Events; @@ -755,9 +842,9 @@ public static class SkeletonBaker { ae.functionName = ev.Data.Name; ae.messageOptions = eventOptions; - if (ev.String != "") + if (ev.String != "" && ev.String != null) { ae.stringParameter = ev.String; - else { + } else { if (ev.Int == 0 && ev.Float == 0) { //do nothing, raw function } else { @@ -1259,7 +1346,7 @@ public static class SkeletonBaker { listIndex++; } else if (curveType == 1) { //stepped - + Keyframe pk = keys[pIndex]; float time = frames[f]; diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs index 5394c75e7..8880a09e7 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs @@ -53,15 +53,16 @@ public class SkeletonDataAssetInspector : Editor { static bool bakeIK = true; static SendMessageOptions bakeEventOptions = SendMessageOptions.DontRequireReceiver; - private SerializedProperty atlasAssets, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix; + private SerializedProperty atlasAssets, skeletonJSON, scale, fromAnimation, toAnimation, duration, defaultMix, controller; private bool m_initialized = false; private SkeletonDataAsset m_skeletonDataAsset; private SkeletonData m_skeletonData; private string m_skeletonDataAssetGUID; + private bool needToSerialize; List warnings = new List(); - + void OnEnable () { SpineEditorUtilities.ConfirmInitialization(); @@ -74,6 +75,7 @@ public class SkeletonDataAssetInspector : Editor { toAnimation = serializedObject.FindProperty("toAnimation"); duration = serializedObject.FindProperty("duration"); defaultMix = serializedObject.FindProperty("defaultMix"); + controller = serializedObject.FindProperty("controller"); m_skeletonDataAsset = (SkeletonDataAsset)target; m_skeletonDataAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_skeletonDataAsset)); @@ -103,7 +105,6 @@ public class SkeletonDataAssetInspector : Editor { override public void OnInspectorGUI () { serializedObject.Update(); - SkeletonDataAsset asset = (SkeletonDataAsset)target; EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(atlasAssets, true); @@ -126,10 +127,12 @@ public class SkeletonDataAssetInspector : Editor { if (m_skeletonData != null) { + DrawMecanim(); DrawAnimationStateInfo(); DrawAnimationList(); DrawSlotList(); DrawBaking(); + } else { DrawReimportButton(); @@ -138,22 +141,24 @@ public class SkeletonDataAssetInspector : Editor { EditorGUILayout.LabelField(new GUIContent(str, SpineEditorUtilities.Icons.warning)); } - if (!Application.isPlaying) { - if (serializedObject.ApplyModifiedProperties() || - (UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") - ) { - asset.Reset(); - } + if(!Application.isPlaying) + serializedObject.ApplyModifiedProperties(); + } + + void DrawMecanim () { + EditorGUILayout.PropertyField(controller, new GUIContent("Controller", SpineEditorUtilities.Icons.controllerIcon)); + if (controller.objectReferenceValue == null) { + if (GUILayout.Button(new GUIContent("Generate Mecanim Controller", SpineEditorUtilities.Icons.controllerIcon), GUILayout.Width(195), GUILayout.Height(20))) + SkeletonBaker.GenerateMecanimAnimationClips(m_skeletonDataAsset); } } void DrawBaking () { - bool pre = showBaking; showBaking = EditorGUILayout.Foldout(showBaking, new GUIContent("Baking", SpineEditorUtilities.Icons.unityIcon)); if (pre != showBaking) EditorPrefs.SetBool("SkeletonDataAssetInspector_showBaking", showBaking); - + if (showBaking) { EditorGUI.indentLevel++; bakeAnimations = EditorGUILayout.Toggle("Bake Animations", bakeAnimations); @@ -170,20 +175,19 @@ public class SkeletonDataAssetInspector : Editor { GUILayout.BeginHorizontal(); { - + if (GUILayout.Button(new GUIContent("Bake All Skins", SpineEditorUtilities.Icons.unityIcon), GUILayout.Height(32), GUILayout.Width(150))) SkeletonBaker.BakeToPrefab(m_skeletonDataAsset, m_skeletonData.Skins, "", bakeAnimations, bakeIK, bakeEventOptions); string skinName = ""; if (m_skeletonAnimation != null && m_skeletonAnimation.skeleton != null) { - + Skin bakeSkin = m_skeletonAnimation.skeleton.Skin; - if (bakeSkin == null){ + if (bakeSkin == null) { skinName = "Default"; bakeSkin = m_skeletonData.Skins[0]; - } - else + } else skinName = m_skeletonAnimation.skeleton.Skin.Name; bool oops = false; @@ -209,18 +213,17 @@ public class SkeletonDataAssetInspector : Editor { - if(!oops) + if (!oops) GUILayout.EndVertical(); } - + } GUILayout.EndHorizontal(); EditorGUI.indentLevel--; - EditorGUI.indentLevel--; } - - + + } void DrawReimportButton () { EditorGUI.BeginDisabledGroup(skeletonJSON.objectReferenceValue == null); @@ -250,6 +253,7 @@ public class SkeletonDataAssetInspector : Editor { if (!showAnimationStateData) return; + EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(defaultMix); // Animation names @@ -282,6 +286,13 @@ public class SkeletonDataAssetInspector : Editor { EditorGUILayout.Space(); EditorGUILayout.EndHorizontal(); + if (EditorGUI.EndChangeCheck()) { + m_skeletonDataAsset.FillStateData(); + EditorUtility.SetDirty(m_skeletonDataAsset); + serializedObject.ApplyModifiedProperties(); + needToSerialize = true; + } + } void DrawAnimationList () { showAnimationList = EditorGUILayout.Foldout(showAnimationList, new GUIContent("Animations", SpineEditorUtilities.Icons.animationRoot)); @@ -532,7 +543,7 @@ public class SkeletonDataAssetInspector : Editor { try { string skinName = EditorPrefs.GetString(m_skeletonDataAssetGUID + "_lastSkin", ""); - m_previewInstance = SpineEditorUtilities.SpawnAnimatedSkeleton((SkeletonDataAsset)target, skinName).gameObject; + m_previewInstance = SpineEditorUtilities.InstantiateSkeletonAnimation((SkeletonDataAsset)target, skinName).gameObject; m_previewInstance.hideFlags = HideFlags.HideAndDontSave; m_previewInstance.layer = 0x1f; @@ -689,6 +700,11 @@ public class SkeletonDataAssetInspector : Editor { } else { //only needed if using smooth menus } + + if (needToSerialize) { + needToSerialize = false; + serializedObject.ApplyModifiedProperties(); + } } void DrawSkinToolbar (Rect r) { diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs index 0ed1a3752..c1ebb804f 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs @@ -43,8 +43,6 @@ using System.Linq; using System.Reflection; using Spine; -using System.Security.Cryptography; - [InitializeOnLoad] public class SpineEditorUtilities : AssetPostprocessor { @@ -73,6 +71,7 @@ public class SpineEditorUtilities : AssetPostprocessor { public static Texture2D hingeChain; public static Texture2D subMeshRenderer; public static Texture2D unityIcon; + public static Texture2D controllerIcon; public static Mesh boneMesh { get { @@ -115,7 +114,7 @@ public class SpineEditorUtilities : AssetPostprocessor { internal static Material _boneMaterial; - public static void Initialize() { + public static void Initialize () { skeleton = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-skeleton.png"); nullBone = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-null.png"); bone = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-bone.png"); @@ -141,6 +140,8 @@ public class SpineEditorUtilities : AssetPostprocessor { subMeshRenderer = (Texture2D)AssetDatabase.LoadMainAssetAtPath(SpineEditorUtilities.editorGUIPath + "/icon-subMeshRenderer.png"); unityIcon = EditorGUIUtility.FindTexture("SceneAsset Icon"); + + controllerIcon = EditorGUIUtility.FindTexture("AnimatorController Icon"); } } @@ -153,11 +154,11 @@ public class SpineEditorUtilities : AssetPostprocessor { public static string defaultShader = "Spine/Skeleton"; public static bool initialized; - static SpineEditorUtilities() { + static SpineEditorUtilities () { Initialize(); } - - static void Initialize(){ + + static void Initialize () { DirectoryInfo rootDir = new DirectoryInfo(Application.dataPath); FileInfo[] files = rootDir.GetFiles("SpineEditorUtilities.cs", SearchOption.AllDirectories); editorPath = Path.GetDirectoryName(files[0].FullName.Replace("\\", "/").Replace(Application.dataPath, "Assets")); @@ -174,13 +175,13 @@ public class SpineEditorUtilities : AssetPostprocessor { HierarchyWindowChanged(); initialized = true; } - - public static void ConfirmInitialization(){ - if(!initialized || Icons.skeleton == null) - Initialize(); + + public static void ConfirmInitialization () { + if (!initialized || Icons.skeleton == null) + Initialize(); } - static void HierarchyWindowChanged() { + static void HierarchyWindowChanged () { skeletonRendererTable.Clear(); skeletonUtilityBoneTable.Clear(); @@ -194,7 +195,7 @@ public class SpineEditorUtilities : AssetPostprocessor { skeletonUtilityBoneTable.Add(b.gameObject.GetInstanceID(), b); } - static void HierarchyWindowItemOnGUI(int instanceId, Rect selectionRect) { + static void HierarchyWindowItemOnGUI (int instanceId, Rect selectionRect) { if (skeletonRendererTable.ContainsKey(instanceId)) { Rect r = new Rect(selectionRect); r.x = r.width - 15; @@ -225,13 +226,10 @@ public class SpineEditorUtilities : AssetPostprocessor { } - static void OnPostprocessAllAssets(string[] imported, string[] deleted, string[] moved, string[] movedFromAssetPaths) { + static void OnPostprocessAllAssets (string[] imported, string[] deleted, string[] moved, string[] movedFromAssetPaths) { ImportSpineContent(imported, false); } - public static void ImportSpineContent(string[] imported, bool reimport = false) { - - MD5 md5 = MD5.Create(); - + public static void ImportSpineContent (string[] imported, bool reimport = false) { List atlasPaths = new List(); List imagePaths = new List(); List skeletonPaths = new List(); @@ -277,7 +275,7 @@ public class SpineEditorUtilities : AssetPostprocessor { ResetExistingSkeletonData(sp); continue; } - + string dir = Path.GetDirectoryName(sp); @@ -319,7 +317,7 @@ public class SpineEditorUtilities : AssetPostprocessor { Debug.Log("Skipped importing: " + Path.GetFileName(sp)); resolved = true; break; - + case 2: //abort @@ -337,7 +335,7 @@ public class SpineEditorUtilities : AssetPostprocessor { //TODO: any post processing of images } - static bool CheckForValidSkeletonData(string skeletonJSONPath) { + static bool CheckForValidSkeletonData (string skeletonJSONPath) { string dir = Path.GetDirectoryName(skeletonJSONPath); TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(skeletonJSONPath, typeof(TextAsset)); @@ -377,14 +375,30 @@ public class SpineEditorUtilities : AssetPostprocessor { Selection.activeObject = null; skeletonDataAsset.Reset(); - } + string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(skeletonDataAsset)); + string lastHash = EditorPrefs.GetString(guid + "_hash"); + + if (lastHash != skeletonDataAsset.GetSkeletonData(true).Hash) { + //do any upkeep on synchronized assets + UpdateMecanimClips(skeletonDataAsset); + } + + EditorPrefs.SetString(guid + "_hash", skeletonDataAsset.GetSkeletonData(true).Hash); + } } } } + static void UpdateMecanimClips (SkeletonDataAsset skeletonDataAsset) { + if (skeletonDataAsset.controller == null) + return; - static bool CheckForValidAtlas(string atlasPath) { + SkeletonBaker.GenerateMecanimAnimationClips(skeletonDataAsset); + } + + + static bool CheckForValidAtlas (string atlasPath) { string dir = Path.GetDirectoryName(atlasPath); TextAsset textAsset = (TextAsset)AssetDatabase.LoadAssetAtPath(atlasPath, typeof(TextAsset)); @@ -405,7 +419,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return false; } - static List MultiAtlasDialog(List requiredPaths, string initialDirectory, string header = "") { + static List MultiAtlasDialog (List requiredPaths, string initialDirectory, string header = "") { List atlasAssets = new List(); @@ -422,7 +436,7 @@ public class SpineEditorUtilities : AssetPostprocessor { sb.AppendLine("\t" + atlasAssets[i].name); } - sb.AppendLine(); + sb.AppendLine(); sb.AppendLine("Missing Regions:"); List missingRegions = new List(requiredPaths); @@ -447,7 +461,7 @@ public class SpineEditorUtilities : AssetPostprocessor { int result = EditorUtility.DisplayDialogComplex("Atlas Selection", sb.ToString(), "Select", "Finish", "Abort"); - switch(result){ + switch (result) { case 0: AtlasAsset selectedAtlasAsset = GetAtlasDialog(lastAtlasPath); if (selectedAtlasAsset != null) { @@ -476,12 +490,12 @@ public class SpineEditorUtilities : AssetPostprocessor { } - + return atlasAssets; } - static AtlasAsset GetAtlasDialog(string dirPath) { + static AtlasAsset GetAtlasDialog (string dirPath) { string path = EditorUtility.OpenFilePanel("Select AtlasAsset...", dirPath, "asset"); if (path == "") return null; @@ -497,7 +511,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return (AtlasAsset)obj; } - public static List GetRequiredAtlasRegions(string jsonPath) { + public static List GetRequiredAtlasRegions (string jsonPath) { List requiredPaths = new List(); TextAsset spineJson = (TextAsset)AssetDatabase.LoadAssetAtPath(jsonPath, typeof(TextAsset)); @@ -523,7 +537,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return requiredPaths; } - static AtlasAsset GetMatchingAtlas(List requiredPaths, List atlasAssets) { + static AtlasAsset GetMatchingAtlas (List requiredPaths, List atlasAssets) { AtlasAsset atlasAssetMatch = null; foreach (AtlasAsset a in atlasAssets) { @@ -546,7 +560,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return atlasAssetMatch; } - static List FindAtlasesAtPath(string path) { + static List FindAtlasesAtPath (string path) { List arr = new List(); DirectoryInfo dir = new DirectoryInfo(path); @@ -568,7 +582,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return arr; } - public static bool IsSpineJSON(TextAsset asset) { + public static bool IsSpineJSON (TextAsset asset) { object obj = Json.Deserialize(new StringReader(asset.text)); if (obj == null) { Debug.LogError("Is not valid JSON"); @@ -588,7 +602,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return true; } - static AtlasAsset IngestSpineAtlas(TextAsset atlasText) { + static AtlasAsset IngestSpineAtlas (TextAsset atlasText) { if (atlasText == null) { Debug.LogWarning("Atlas source cannot be null!"); return null; @@ -666,7 +680,7 @@ public class SpineEditorUtilities : AssetPostprocessor { return (AtlasAsset)AssetDatabase.LoadAssetAtPath(atlasPath, typeof(AtlasAsset)); } - static SkeletonDataAsset IngestSpineProject(TextAsset spineJson, params AtlasAsset[] atlasAssets) { + static SkeletonDataAsset IngestSpineProject (TextAsset spineJson, params AtlasAsset[] atlasAssets) { string primaryName = Path.GetFileNameWithoutExtension(spineJson.name); string assetPath = Path.GetDirectoryName(AssetDatabase.GetAssetPath(spineJson)); string filePath = assetPath + "/" + primaryName + "_SkeletonData.asset"; @@ -699,20 +713,20 @@ public class SpineEditorUtilities : AssetPostprocessor { } } - [MenuItem("Assets/Spine/Spawn")] - static void SpawnAnimatedSkeleton() { + [MenuItem("Assets/Spine/Instantiate (SkeletonAnimation)")] + static void InstantiateSkeletonAnimation () { Object[] arr = Selection.objects; foreach (Object o in arr) { string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(o)); string skinName = EditorPrefs.GetString(guid + "_lastSkin", ""); - SpawnAnimatedSkeleton((SkeletonDataAsset)o, skinName); + InstantiateSkeletonAnimation((SkeletonDataAsset)o, skinName); SceneView.RepaintAll(); } } - [MenuItem("Assets/Spine/Spawn", true)] - static bool ValidateSpawnAnimatedSkeleton() { + [MenuItem("Assets/Spine/Instantiate (SkeletonAnimation)", true)] + static bool ValidateInstantiateSkeletonAnimation () { Object[] arr = Selection.objects; if (arr.Length == 0) @@ -726,11 +740,11 @@ public class SpineEditorUtilities : AssetPostprocessor { return true; } - public static SkeletonAnimation SpawnAnimatedSkeleton(SkeletonDataAsset skeletonDataAsset, string skinName) { - return SpawnAnimatedSkeleton(skeletonDataAsset, skeletonDataAsset.GetSkeletonData(true).FindSkin(skinName)); + public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, string skinName) { + return InstantiateSkeletonAnimation(skeletonDataAsset, skeletonDataAsset.GetSkeletonData(true).FindSkin(skinName)); } - public static SkeletonAnimation SpawnAnimatedSkeleton(SkeletonDataAsset skeletonDataAsset, Skin skin = null) { + public static SkeletonAnimation InstantiateSkeletonAnimation (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { GameObject go = new GameObject(skeletonDataAsset.name.Replace("_SkeletonData", ""), typeof(MeshFilter), typeof(MeshRenderer), typeof(SkeletonAnimation)); SkeletonAnimation anim = go.GetComponent(); anim.skeletonDataAsset = skeletonDataAsset; @@ -746,18 +760,18 @@ public class SpineEditorUtilities : AssetPostprocessor { } } - + anim.calculateNormals = requiresNormals; SkeletonData data = skeletonDataAsset.GetSkeletonData(true); if (data == null) { - for(int i = 0; i < skeletonDataAsset.atlasAssets.Length; i++){ + for (int i = 0; i < skeletonDataAsset.atlasAssets.Length; i++) { string reloadAtlasPath = AssetDatabase.GetAssetPath(skeletonDataAsset.atlasAssets[i]); skeletonDataAsset.atlasAssets[i] = (AtlasAsset)AssetDatabase.LoadAssetAtPath(reloadAtlasPath, typeof(AtlasAsset)); - } - + } + data = skeletonDataAsset.GetSkeletonData(true); } @@ -779,4 +793,89 @@ public class SpineEditorUtilities : AssetPostprocessor { return anim; } + + [MenuItem("Assets/Spine/Instantiate (Mecanim)")] + static void InstantiateSkeletonAnimator () { + Object[] arr = Selection.objects; + foreach (Object o in arr) { + string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(o)); + string skinName = EditorPrefs.GetString(guid + "_lastSkin", ""); + + InstantiateSkeletonAnimator((SkeletonDataAsset)o, skinName); + SceneView.RepaintAll(); + } + } + + [MenuItem("Assets/Spine/Instantiate (SkeletonAnimation)", true)] + static bool ValidateInstantiateSkeletonAnimator () { + Object[] arr = Selection.objects; + + if (arr.Length == 0) + return false; + + foreach (Object o in arr) { + if (o.GetType() != typeof(SkeletonDataAsset)) + return false; + } + + return true; + } + + public static SkeletonAnimator InstantiateSkeletonAnimator (SkeletonDataAsset skeletonDataAsset, string skinName) { + return InstantiateSkeletonAnimator(skeletonDataAsset, skeletonDataAsset.GetSkeletonData(true).FindSkin(skinName)); + } + + public static SkeletonAnimator InstantiateSkeletonAnimator (SkeletonDataAsset skeletonDataAsset, Skin skin = null) { + GameObject go = new GameObject(skeletonDataAsset.name.Replace("_SkeletonData", ""), typeof(MeshFilter), typeof(MeshRenderer), typeof(Animator), typeof(SkeletonAnimator)); + + if(skeletonDataAsset.controller == null){ + SkeletonBaker.GenerateMecanimAnimationClips(skeletonDataAsset); + } + + go.GetComponent().runtimeAnimatorController = skeletonDataAsset.controller; + + SkeletonAnimator anim = go.GetComponent(); + anim.skeletonDataAsset = skeletonDataAsset; + + bool requiresNormals = false; + + foreach (AtlasAsset atlasAsset in anim.skeletonDataAsset.atlasAssets) { + foreach (Material m in atlasAsset.materials) { + if (m.shader.name.Contains("Lit")) { + requiresNormals = true; + break; + } + } + } + + anim.calculateNormals = requiresNormals; + + SkeletonData data = skeletonDataAsset.GetSkeletonData(true); + + if (data == null) { + for (int i = 0; i < skeletonDataAsset.atlasAssets.Length; i++) { + string reloadAtlasPath = AssetDatabase.GetAssetPath(skeletonDataAsset.atlasAssets[i]); + skeletonDataAsset.atlasAssets[i] = (AtlasAsset)AssetDatabase.LoadAssetAtPath(reloadAtlasPath, typeof(AtlasAsset)); + } + + data = skeletonDataAsset.GetSkeletonData(true); + } + + if (skin == null) + skin = data.DefaultSkin; + + if (skin == null) + skin = data.Skins[0]; + + anim.Reset(); + + anim.skeleton.SetSkin(skin); + anim.initialSkinName = skin.Name; + + anim.skeleton.Update(1); + anim.skeleton.UpdateWorldTransform(); + anim.LateUpdate(); + + return anim; + } } \ No newline at end of file diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs index 0c4c9a44f..07ebca526 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs @@ -36,16 +36,32 @@ using Spine; [ExecuteInEditMode] [AddComponentMenu("Spine/SkeletonAnimation")] -public class SkeletonAnimation : SkeletonRenderer { +public class SkeletonAnimation : SkeletonRenderer, ISkeletonAnimation { public float timeScale = 1; public bool loop; public Spine.AnimationState state; - public delegate void UpdateBonesDelegate (SkeletonAnimation skeleton); - public UpdateBonesDelegate UpdateLocal; - public UpdateBonesDelegate UpdateWorld; - public UpdateBonesDelegate UpdateComplete; + + public event UpdateBonesDelegate UpdateLocal { + add { _UpdateLocal += value; } + remove { _UpdateLocal -= value; } + } + + public event UpdateBonesDelegate UpdateWorld { + add { _UpdateWorld += value; } + remove { _UpdateWorld -= value; } + } + + public event UpdateBonesDelegate UpdateComplete { + add { _UpdateComplete += value; } + remove { _UpdateComplete -= value; } + } + + protected event UpdateBonesDelegate _UpdateLocal; + protected event UpdateBonesDelegate _UpdateWorld; + protected event UpdateBonesDelegate _UpdateComplete; + [SerializeField] private String _animationName; @@ -91,18 +107,18 @@ public class SkeletonAnimation : SkeletonRenderer { state.Update(deltaTime); state.Apply(skeleton); - if (UpdateLocal != null) - UpdateLocal(this); + if (_UpdateLocal != null) + _UpdateLocal(this); skeleton.UpdateWorldTransform(); - if (UpdateWorld != null) { - UpdateWorld(this); + if (_UpdateWorld != null) { + _UpdateWorld(this); skeleton.UpdateWorldTransform(); } - if (UpdateComplete != null) { - UpdateComplete(this); + if (_UpdateComplete != null) { + _UpdateComplete(this); } } } diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs new file mode 100644 index 000000000..e06b3085c --- /dev/null +++ b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs @@ -0,0 +1,11 @@ +using UnityEngine; +using System.Collections; + +public delegate void UpdateBonesDelegate (SkeletonRenderer skeletonRenderer); +public interface ISkeletonAnimation { + event UpdateBonesDelegate UpdateLocal; + event UpdateBonesDelegate UpdateWorld; + event UpdateBonesDelegate UpdateComplete; + + void LateUpdate (); +} \ No newline at end of file diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta new file mode 100644 index 000000000..6572a198f --- /dev/null +++ b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a7b480b941568134891f411137bfbf55 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs new file mode 100644 index 000000000..f218ae89a --- /dev/null +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs @@ -0,0 +1,100 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using Spine; + +[RequireComponent(typeof(Animator))] +public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { + + public event UpdateBonesDelegate UpdateLocal { + add { _UpdateLocal += value; } + remove { _UpdateLocal -= value; } + } + + public event UpdateBonesDelegate UpdateWorld { + add { _UpdateWorld += value; } + remove { _UpdateWorld -= value; } + } + + public event UpdateBonesDelegate UpdateComplete { + add { _UpdateComplete += value; } + remove { _UpdateComplete -= value; } + } + + protected event UpdateBonesDelegate _UpdateLocal; + protected event UpdateBonesDelegate _UpdateWorld; + protected event UpdateBonesDelegate _UpdateComplete; + + Dictionary animationTable = new Dictionary(); + Animator animator; + + public override void Reset () { + base.Reset(); + if (!valid) + return; + + animationTable.Clear(); + + var data = skeletonDataAsset.GetSkeletonData(true); + + foreach (var a in data.Animations) { + animationTable.Add(a.Name, a); + } + + animator = GetComponent(); + } + + void Update () { + if (skeleton == null) + return; + + skeleton.Update(Time.deltaTime); + + //apply + int layerCount = animator.layerCount; + float deltaTime = Time.deltaTime; + for (int i = 0; i < layerCount; i++) { + + float layerWeight = animator.GetLayerWeight(i); + if (i == 0) + layerWeight = 1; + + var stateInfo = animator.GetCurrentAnimatorStateInfo(i); + var clipInfo = animator.GetCurrentAnimationClipState(i); + var nextStateInfo = animator.GetNextAnimatorStateInfo(i); + var nextClipInfo = animator.GetNextAnimationClipState(i); + + foreach (var info in clipInfo) { + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = stateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, stateInfo.loop, null, weight); + } + + foreach (var info in nextClipInfo) { + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = nextStateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, nextStateInfo.loop, null, weight); + } + } + + if (_UpdateLocal != null) + _UpdateLocal(this); + + skeleton.UpdateWorldTransform(); + + if (_UpdateWorld != null) { + _UpdateWorld(this); + skeleton.UpdateWorldTransform(); + } + + if (_UpdateComplete != null) { + _UpdateComplete(this); + } + } +} diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta new file mode 100644 index 000000000..91dba98cc --- /dev/null +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9db98c60740638449864eb028fbe7ad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs index 06afb8275..327ba4640 100644 --- a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs +++ b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs @@ -42,6 +42,7 @@ public class SkeletonDataAsset : ScriptableObject { public String[] toAnimation; public float[] duration; public float defaultMix; + public RuntimeAnimatorController controller; private SkeletonData skeletonData; private AnimationStateData stateData; @@ -86,9 +87,6 @@ public class SkeletonDataAsset : ScriptableObject { } } - - - if (skeletonData != null) return skeletonData; @@ -103,14 +101,21 @@ public class SkeletonDataAsset : ScriptableObject { } stateData = new AnimationStateData(skeletonData); + FillStateData(); + + return skeletonData; + } + + public void FillStateData () { + if (stateData == null) + return; + stateData.DefaultMix = defaultMix; for (int i = 0, n = fromAnimation.Length; i < n; i++) { if (fromAnimation[i].Length == 0 || toAnimation[i].Length == 0) continue; stateData.SetMix(fromAnimation[i], toAnimation[i], duration[i]); } - - return skeletonData; } public AnimationStateData GetAnimationStateData() { diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs index c274c3db6..d880addb2 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs @@ -38,7 +38,7 @@ using System.Collections; using System.Collections.Generic; using Spine; -[RequireComponent(typeof(SkeletonAnimation))] +[RequireComponent(typeof(ISkeletonAnimation))] [ExecuteInEditMode] public class SkeletonUtility : MonoBehaviour { @@ -80,7 +80,7 @@ public class SkeletonUtility : MonoBehaviour { [HideInInspector] public SkeletonRenderer skeletonRenderer; [HideInInspector] - public SkeletonAnimation skeletonAnimation; + public ISkeletonAnimation skeletonAnimation; [System.NonSerialized] public List utilityBones = new List(); [System.NonSerialized] @@ -98,6 +98,8 @@ public class SkeletonUtility : MonoBehaviour { if (skeletonAnimation == null) { skeletonAnimation = GetComponent(); + if (skeletonAnimation == null) + skeletonAnimation = GetComponent(); } skeletonRenderer.OnReset -= HandleRendererReset; @@ -209,7 +211,7 @@ public class SkeletonUtility : MonoBehaviour { } - void UpdateLocal (SkeletonAnimation anim) { + void UpdateLocal (SkeletonRenderer anim) { if (needToReprocessBones) CollectBones(); @@ -224,14 +226,14 @@ public class SkeletonUtility : MonoBehaviour { UpdateAllBones(); } - void UpdateWorld (SkeletonAnimation anim) { + void UpdateWorld (SkeletonRenderer anim) { UpdateAllBones(); foreach (SkeletonUtilityConstraint c in utilityConstraints) c.DoUpdate(); } - void UpdateComplete (SkeletonAnimation anim) { + void UpdateComplete (SkeletonRenderer anim) { UpdateAllBones(); } From f25f33fbc5017edaa6a1b24f2acf7d76c1d807e1 Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Tue, 17 Feb 2015 17:33:30 -0800 Subject: [PATCH 4/6] MixMode list added to SkeletonAnimator --- .../Editor/SkeletonAnimatorInspector.cs | 16 ++-- .../Assets/spine-unity/SkeletonAnimator.cs | 94 ++++++++++++++++--- 2 files changed, 88 insertions(+), 22 deletions(-) diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs index dfbac484c..333ccefcd 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs @@ -34,22 +34,22 @@ using Spine; [CustomEditor(typeof(SkeletonAnimator))] public class SkeletonAnimatorInspector : SkeletonRendererInspector { - protected SerializedProperty animationName, loop, timeScale; - protected bool isPrefab; + protected SerializedProperty layerMixModes; protected override void OnEnable () { base.OnEnable(); - animationName = serializedObject.FindProperty("_animationName"); - loop = serializedObject.FindProperty("loop"); - timeScale = serializedObject.FindProperty("timeScale"); - - if (PrefabUtility.GetPrefabType(this.target) == PrefabType.Prefab) - isPrefab = true; + layerMixModes = serializedObject.FindProperty("layerMixModes"); + } protected override void gui () { base.gui(); + + + EditorGUILayout.PropertyField(layerMixModes, true); + + serializedObject.ApplyModifiedProperties(); } } diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs index f218ae89a..3b950c5e0 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs @@ -6,6 +6,9 @@ using Spine; [RequireComponent(typeof(Animator))] public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { + public enum MixMode { AlwaysMix, MixNext, SpineStyle } + public MixMode[] layerMixModes = new MixMode[0]; + public event UpdateBonesDelegate UpdateLocal { add { _UpdateLocal += value; } remove { _UpdateLocal -= value; } @@ -42,12 +45,18 @@ public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { } animator = GetComponent(); + + } void Update () { - if (skeleton == null) + if (!valid) return; + if (layerMixModes.Length != animator.layerCount) { + System.Array.Resize(ref layerMixModes, animator.layerCount); + } + skeleton.Update(Time.deltaTime); //apply @@ -64,22 +73,79 @@ public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { var nextStateInfo = animator.GetNextAnimatorStateInfo(i); var nextClipInfo = animator.GetNextAnimationClipState(i); - foreach (var info in clipInfo) { - float weight = info.weight * layerWeight; - if (weight == 0) - continue; + MixMode mode = layerMixModes[i]; - float time = stateInfo.normalizedTime * info.clip.length; - animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, stateInfo.loop, null, weight); - } + if (mode == MixMode.AlwaysMix) { + //always use Mix instead of Applying the first non-zero weighted clip + foreach (var info in clipInfo) { + float weight = info.weight * layerWeight; + if (weight == 0) + continue; - foreach (var info in nextClipInfo) { - float weight = info.weight * layerWeight; - if (weight == 0) - continue; + float time = stateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, stateInfo.loop, null, weight); + } - float time = nextStateInfo.normalizedTime * info.clip.length; - animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, nextStateInfo.loop, null, weight); + foreach (var info in nextClipInfo) { + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = nextStateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, nextStateInfo.loop, null, weight); + } + } else if (mode >= MixMode.MixNext) { + //apply first non-zero weighted clip + int c = 0; + + for (; c < clipInfo.Length; c++) { + var info = clipInfo[c]; + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = stateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Apply(skeleton, Mathf.Max(0, time - deltaTime), time, stateInfo.loop, null); + break; + } + + //mix the rest + for (; c < clipInfo.Length; c++) { + var info = clipInfo[c]; + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = stateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, stateInfo.loop, null, weight); + } + + c = 0; + + //apply next clip directly instead of mixing (ie: no crossfade, ignores mecanim transition weights) + if (mode == MixMode.SpineStyle) { + for (; c < nextClipInfo.Length; c++) { + var info = nextClipInfo[c]; + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = nextStateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Apply(skeleton, Mathf.Max(0, time - deltaTime), time, nextStateInfo.loop, null); + break; + } + } + + //mix the rest + for (; c < nextClipInfo.Length; c++) { + var info = nextClipInfo[c]; + float weight = info.weight * layerWeight; + if (weight == 0) + continue; + + float time = nextStateInfo.normalizedTime * info.clip.length; + animationTable[info.clip.name].Mix(skeleton, Mathf.Max(0, time - deltaTime), time, nextStateInfo.loop, null, weight); + } } } From 9c7b95ff300eb012962740d720a557c4ff3ec495 Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Tue, 17 Feb 2015 18:22:51 -0800 Subject: [PATCH 5/6] SkeletonAnimator update Unity5 compatibility pass --- .../Scripts/BasicPlatformerController.cs.meta | 2 + .../Assets/Examples/Scripts/Chimera.cs.meta | 2 + .../Scripts/ConstrainedCamera.cs.meta | 2 + .../Examples/Scripts/DynamicSpineBone.cs.meta | 2 + .../Scripts/FootSoldierExample.cs.meta | 2 + .../Assets/Examples/Scripts/Goblins.cs.meta | 2 + .../Assets/Examples/Scripts/Raptor.cs.meta | 2 + .../Assets/Examples/Scripts/Spineboy.cs.meta | 2 + .../Examples/Scripts/SpineboyController.cs | 8 +-- .../Scripts/SpineboyController.cs.meta | 2 + .../Assets/spine-unity/AtlasAsset.cs.meta | 2 + .../spine-unity/AtlasRegionAttacher.cs.meta | 2 + .../Assets/spine-unity/BoneFollower.cs.meta | 2 + .../Assets/spine-unity/CustomSkin.cs.meta | 2 + .../Editor/AtlasAssetInspector.cs.meta | 2 + .../Editor/BoneFollowerInspector.cs.meta | 2 + .../Editor/GUI/icon-animation.png.meta | 6 ++ .../Editor/GUI/icon-animationRoot.png.meta | 6 ++ .../spine-unity/Editor/GUI/icon-bone.png.meta | 6 ++ .../Editor/GUI/icon-boneNib.png.meta | 6 ++ .../Editor/GUI/icon-boundingBox.png.meta | 6 ++ .../Editor/GUI/icon-constraintNib.png.meta | 6 ++ .../Editor/GUI/icon-event.png.meta | 6 ++ .../Editor/GUI/icon-hingeChain.png.meta | 6 ++ .../Editor/GUI/icon-image.png.meta | 6 ++ .../spine-unity/Editor/GUI/icon-mesh.png.meta | 6 ++ .../spine-unity/Editor/GUI/icon-null.png.meta | 6 ++ .../Editor/GUI/icon-poseBones.png.meta | 6 ++ .../Editor/GUI/icon-skeleton.png.meta | 6 ++ .../Editor/GUI/icon-skeletonUtility.png.meta | 6 ++ .../spine-unity/Editor/GUI/icon-skin.png.meta | 6 ++ .../Editor/GUI/icon-skinPlaceholder.png.meta | 6 ++ .../Editor/GUI/icon-skinsRoot.png.meta | 6 ++ .../spine-unity/Editor/GUI/icon-slot.png.meta | 6 ++ .../Editor/GUI/icon-slotRoot.png.meta | 6 ++ .../Editor/GUI/icon-spine.png.meta | 6 ++ .../Editor/GUI/icon-subMeshRenderer.png.meta | 6 ++ .../Editor/GUI/icon-warning.png.meta | 6 ++ .../Editor/GUI/icon-weights.png.meta | 6 ++ .../Assets/spine-unity/Editor/Menus.cs.meta | 2 + .../Editor/SkeletonAnimationInspector.cs.meta | 2 + .../Editor/SkeletonAnimatorInspector.cs | 9 +-- .../Editor/SkeletonAnimatorInspector.cs.meta | 2 + .../spine-unity/Editor/SkeletonBaker.cs | 66 ++++++++++++++++--- .../spine-unity/Editor/SkeletonBaker.cs.meta | 2 + .../Editor/SkeletonDataAssetInspector.cs | 10 +-- .../Editor/SkeletonDataAssetInspector.cs.meta | 2 + .../Editor/SkeletonRendererInspector.cs.meta | 2 + .../Editor/SpineAttributeDrawers.cs.meta | 2 + .../Editor/SpineEditorUtilities.cs.meta | 2 + .../spine-unity/Shaders/Bones.shader.meta | 2 + .../spine-unity/Shaders/HiddenPass.mat.meta | 2 + .../Shaders/HiddenPass.shader.meta | 2 + .../spine-unity/Shaders/Skeleton.shader.meta | 2 + .../Shaders/SkeletonLit.shader.meta | 2 + .../spine-unity/SkeletonAnimation.cs.meta | 2 + .../SkeletonAnimationInterface.cs.meta | 2 + .../Assets/spine-unity/SkeletonAnimator.cs | 45 ++++++++++++- .../spine-unity/SkeletonAnimator.cs.meta | 2 + .../spine-unity/SkeletonDataAsset.cs.meta | 2 + .../spine-unity/SkeletonExtensions.cs.meta | 2 + .../Assets/spine-unity/SkeletonRenderer.cs | 6 +- .../spine-unity/SkeletonRenderer.cs.meta | 2 + .../Editor/SkeletonUtilityBoneInspector.cs | 8 +-- .../SkeletonUtilityBoneInspector.cs.meta | 2 + .../Editor/SkeletonUtilityInspector.cs.meta | 2 + .../SkeletonUtility/SkeletonUtility.cs | 4 +- .../SkeletonUtility/SkeletonUtility.cs.meta | 2 + .../SkeletonUtilityBone.cs.meta | 2 + .../SkeletonUtilityConstraint.cs.meta | 2 + .../SkeletonUtilityEyeConstraint.cs.meta | 2 + .../SkeletonUtilityGroundConstraint.cs.meta | 2 + .../SkeletonUtilityKinematicShadow.cs | 6 +- .../SkeletonUtilityKinematicShadow.cs.meta | 2 + .../SkeletonUtilitySubmeshRenderer.cs | 8 +-- .../SkeletonUtilitySubmeshRenderer.cs.meta | 2 + .../spine-unity/SpineAttributes.cs.meta | 2 + 77 files changed, 354 insertions(+), 42 deletions(-) diff --git a/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta b/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta index 18fbb8ef4..6dc6752e8 100644 --- a/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/BasicPlatformerController.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/Chimera.cs.meta b/spine-unity/Assets/Examples/Scripts/Chimera.cs.meta index ae5a4019f..d38c663e5 100644 --- a/spine-unity/Assets/Examples/Scripts/Chimera.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/Chimera.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta b/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta index 127befb45..5aa1cd4d6 100644 --- a/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/ConstrainedCamera.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs.meta b/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs.meta index 6aac53582..bc05f26e6 100644 --- a/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/DynamicSpineBone.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs.meta b/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs.meta index c82e3bd15..d7028c915 100644 --- a/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/FootSoldierExample.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/Goblins.cs.meta b/spine-unity/Assets/Examples/Scripts/Goblins.cs.meta index 0a8ee7905..1f45bb9e9 100644 --- a/spine-unity/Assets/Examples/Scripts/Goblins.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/Goblins.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/Raptor.cs.meta b/spine-unity/Assets/Examples/Scripts/Raptor.cs.meta index 3738cf371..4f84770b9 100644 --- a/spine-unity/Assets/Examples/Scripts/Raptor.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/Raptor.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/Spineboy.cs.meta b/spine-unity/Assets/Examples/Scripts/Spineboy.cs.meta index 3e2eb3457..d1e17cf35 100644 --- a/spine-unity/Assets/Examples/Scripts/Spineboy.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/Spineboy.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs b/spine-unity/Assets/Examples/Scripts/SpineboyController.cs index 064152df4..6e0b04a6a 100644 --- a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs +++ b/spine-unity/Assets/Examples/Scripts/SpineboyController.cs @@ -68,13 +68,13 @@ public class SpineboyController : MonoBehaviour { if (absX > 0.7f) { SetAnimation(runAnimation, true); - rigidbody2D.velocity = new Vector2(runVelocity * Mathf.Sign(x), rigidbody2D.velocity.y); + GetComponent().velocity = new Vector2(runVelocity * Mathf.Sign(x), GetComponent().velocity.y); } else if (absX > 0) { SetAnimation(walkAnimation, true); - rigidbody2D.velocity = new Vector2(walkVelocity * Mathf.Sign(x), rigidbody2D.velocity.y); + GetComponent().velocity = new Vector2(walkVelocity * Mathf.Sign(x), GetComponent().velocity.y); } else { SetAnimation(idleAnimation, true); - rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y); + GetComponent().velocity = new Vector2(0, GetComponent().velocity.y); } } else { if (skeletonAnimation.state.GetCurrent(0).Animation.Name != hitAnimation) @@ -101,7 +101,7 @@ public class SpineboyController : MonoBehaviour { } else { skeletonAnimation.state.SetAnimation(0, hitAnimation, false); skeletonAnimation.state.AddAnimation(0, currentAnimation, true, 0); - rigidbody2D.velocity = new Vector2(0, rigidbody2D.velocity.y); + GetComponent().velocity = new Vector2(0, GetComponent().velocity.y); hit = true; } diff --git a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta b/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta index 1007cc854..6ab4c9a3b 100644 --- a/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta +++ b/spine-unity/Assets/Examples/Scripts/SpineboyController.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/AtlasAsset.cs.meta b/spine-unity/Assets/spine-unity/AtlasAsset.cs.meta index 8cd9bc105..079bc6a59 100644 --- a/spine-unity/Assets/spine-unity/AtlasAsset.cs.meta +++ b/spine-unity/Assets/spine-unity/AtlasAsset.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta b/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta index bbf8780fa..2b62bad2a 100644 --- a/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta +++ b/spine-unity/Assets/spine-unity/AtlasRegionAttacher.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs.meta b/spine-unity/Assets/spine-unity/BoneFollower.cs.meta index 29dabc13e..c5bb78cfc 100644 --- a/spine-unity/Assets/spine-unity/BoneFollower.cs.meta +++ b/spine-unity/Assets/spine-unity/BoneFollower.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/CustomSkin.cs.meta b/spine-unity/Assets/spine-unity/CustomSkin.cs.meta index 3a7ba7a9d..ade04ec0d 100644 --- a/spine-unity/Assets/spine-unity/CustomSkin.cs.meta +++ b/spine-unity/Assets/spine-unity/CustomSkin.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta index 898e53399..2f5962a13 100644 --- a/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/AtlasAssetInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs.meta index a5cf9ae89..0448ccb60 100644 --- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-animation.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-animation.png.meta index 6d9bc41dd..dcf6806e2 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-animation.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-animation.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-animationRoot.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-animationRoot.png.meta index 4bcf433e8..1bbca1c8f 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-animationRoot.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-animationRoot.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-bone.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-bone.png.meta index 9c59ed87d..f0cbaeaa1 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-bone.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-bone.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-boneNib.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-boneNib.png.meta index 955598a84..a0b91bee0 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-boneNib.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-boneNib.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-boundingBox.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-boundingBox.png.meta index c90f54d3c..49c9ab374 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-boundingBox.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-boundingBox.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-constraintNib.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-constraintNib.png.meta index e7ab7aca3..a69272890 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-constraintNib.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-constraintNib.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-event.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-event.png.meta index 2ab786189..0bf19dba7 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-event.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-event.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-hingeChain.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-hingeChain.png.meta index 6f346e072..83eb12195 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-hingeChain.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-hingeChain.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: -1 nPOTScale: 1 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-image.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-image.png.meta index 24d78a242..421c654a1 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-image.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-image.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-mesh.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-mesh.png.meta index a98b0e9c8..2b49d8b05 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-mesh.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-mesh.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-null.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-null.png.meta index a949f63a6..29da564a9 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-null.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-null.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-poseBones.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-poseBones.png.meta index c3748ea88..800466b42 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-poseBones.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-poseBones.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeleton.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeleton.png.meta index f607575fb..9c2a1a735 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeleton.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeleton.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeletonUtility.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeletonUtility.png.meta index 9d3c22794..3a77fd7fc 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeletonUtility.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skeletonUtility.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skin.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skin.png.meta index 3be7a6e69..364699a3f 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skin.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skin.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinPlaceholder.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinPlaceholder.png.meta index e6ebc95cc..92955a92e 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinPlaceholder.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinPlaceholder.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinsRoot.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinsRoot.png.meta index e332380e8..b8ce214ce 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinsRoot.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-skinsRoot.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-slot.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-slot.png.meta index 89224b580..66d52b051 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-slot.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-slot.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-slotRoot.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-slotRoot.png.meta index d85022986..3d9fdd737 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-slotRoot.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-slotRoot.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-spine.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-spine.png.meta index c0ec65ca2..811e17a60 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-spine.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-spine.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-subMeshRenderer.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-subMeshRenderer.png.meta index cbccad91c..fa3792831 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-subMeshRenderer.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-subMeshRenderer.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -1 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-warning.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-warning.png.meta index e32950ca4..87c616fcb 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-warning.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-warning.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/GUI/icon-weights.png.meta b/spine-unity/Assets/spine-unity/Editor/GUI/icon-weights.png.meta index 067337d4f..e25807b07 100644 --- a/spine-unity/Assets/spine-unity/Editor/GUI/icon-weights.png.meta +++ b/spine-unity/Assets/spine-unity/Editor/GUI/icon-weights.png.meta @@ -20,6 +20,9 @@ TextureImporter: isReadable: 0 grayScaleToAlpha: 0 generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 seamlessCubemap: 0 textureFormat: -3 maxTextureSize: 1024 @@ -30,6 +33,7 @@ TextureImporter: wrapMode: 1 nPOTScale: 0 lightmap: 0 + rGBM: 0 compressionQuality: 50 spriteMode: 0 spriteExtrude: 1 @@ -45,3 +49,5 @@ TextureImporter: sprites: [] spritePackingTag: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/Menus.cs.meta b/spine-unity/Assets/spine-unity/Editor/Menus.cs.meta index ab58e94aa..d33433fea 100644 --- a/spine-unity/Assets/spine-unity/Editor/Menus.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/Menus.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimationInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimationInspector.cs.meta index 012f0375f..1ca794134 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimationInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimationInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs index 333ccefcd..e6eb7de8b 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs @@ -27,6 +27,11 @@ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *****************************************************************************/ + +/***************************************************************************** + * SkeletonAnimatorInspector created by Mitch Thompson + * Full irrevocable rights and permissions granted to Esoteric Software +*****************************************************************************/ using System; using UnityEditor; using UnityEngine; @@ -39,15 +44,11 @@ public class SkeletonAnimatorInspector : SkeletonRendererInspector { protected override void OnEnable () { base.OnEnable(); layerMixModes = serializedObject.FindProperty("layerMixModes"); - - - } protected override void gui () { base.gui(); - EditorGUILayout.PropertyField(layerMixModes, true); serializedObject.ApplyModifiedProperties(); diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta index 35b472565..9ef306e63 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs index 8eddefd85..74fcc2899 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs @@ -89,20 +89,32 @@ public static class SkeletonBaker { var skeletonData = skeletonDataAsset.GetSkeletonData(true); bool hasAnimations = bakeAnimations && skeletonData.Animations.Count > 0; +#if UNITY_5 + UnityEditor.Animations.AnimatorController controller = null; +#else UnityEditorInternal.AnimatorController controller = null; - +#endif if (hasAnimations) { string controllerPath = outputPath + "/" + skeletonDataAsset.skeletonJSON.name + " Controller.controller"; bool newAnimContainer = false; var runtimeController = AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController)); +#if UNITY_5 + if (runtimeController != null) { + controller = (UnityEditor.Animations.AnimatorController)runtimeController; + } else { + controller = UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + newAnimContainer = true; + } +#else if (runtimeController != null) { controller = (UnityEditorInternal.AnimatorController)runtimeController; } else { controller = UnityEditorInternal.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); newAnimContainer = true; } +#endif Dictionary existingClipTable = new Dictionary(); List unusedClipNames = new List(); @@ -147,7 +159,12 @@ public static class SkeletonBaker { unusedClipNames.Remove(clip.name); } else { AssetDatabase.AddObjectToAsset(clip, controller); - AnimatorController.AddAnimationClipToController(controller, clip); +#if UNITY_5_0 + controller.AddMotion(clip); +#else + UnityEditorInternal.AnimatorController.AddAnimationClipToController(controller, clip); +#endif + } } @@ -308,8 +325,8 @@ public static class SkeletonBaker { attachmentTransform.gameObject.AddComponent(); } - attachmentTransform.renderer.sharedMaterial = material; - attachmentTransform.renderer.sortingOrder = i; + attachmentTransform.GetComponent().sharedMaterial = material; + attachmentTransform.GetComponent().sortingOrder = i; if (attachmentName != slotData.AttachmentName) attachmentTransform.gameObject.SetActive(false); @@ -365,23 +382,40 @@ public static class SkeletonBaker { string controllerPath = dataPath.Replace("_SkeletonData", "_Controller").Replace(".asset", ".controller"); - - AnimatorController controller; +#if UNITY_5 + UnityEditor.Animations.AnimatorController controller; if (skeletonDataAsset.controller != null) { - controller = (AnimatorController)skeletonDataAsset.controller; + controller = (UnityEditor.Animations.AnimatorController)skeletonDataAsset.controller; } else { if (File.Exists(controllerPath)) { if (EditorUtility.DisplayDialog("Controller Overwrite Warning", "Unknown Controller already exists at: " + controllerPath, "Update", "Overwrite")) { - controller = (AnimatorController)AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController)); + controller = (UnityEditor.Animations.AnimatorController)AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController)); } else { - controller = (AnimatorController)AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + controller = (UnityEditor.Animations.AnimatorController)UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); } } else { - controller = (AnimatorController)AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + controller = (UnityEditor.Animations.AnimatorController)UnityEditor.Animations.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); } } +#else + UnityEditorInternal.AnimatorController controller; + + if (skeletonDataAsset.controller != null) { + controller = (UnityEditorInternal.AnimatorController)skeletonDataAsset.controller; + } else { + if (File.Exists(controllerPath)) { + if (EditorUtility.DisplayDialog("Controller Overwrite Warning", "Unknown Controller already exists at: " + controllerPath, "Update", "Overwrite")) { + controller = (UnityEditorInternal.AnimatorController)AssetDatabase.LoadAssetAtPath(controllerPath, typeof(RuntimeAnimatorController)); + } else { + controller = (UnityEditorInternal.AnimatorController)UnityEditorInternal.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + } + } else { + controller = (UnityEditorInternal.AnimatorController)UnityEditorInternal.AnimatorController.CreateAnimatorControllerAtPath(controllerPath); + } + } +#endif skeletonDataAsset.controller = controller; EditorUtility.SetDirty(skeletonDataAsset); @@ -405,7 +439,11 @@ public static class SkeletonBaker { //generate new dummy clip AnimationClip newClip = new AnimationClip(); newClip.name = name; +#if UNITY_5 +#else AnimationUtility.SetAnimationType(newClip, ModelImporterAnimationType.Generic); +#endif + AssetDatabase.AddObjectToAsset(newClip, controller); clipTable.Add(name, newClip); } @@ -735,10 +773,14 @@ public static class SkeletonBaker { } static void SetAnimationSettings (AnimationClip clip, AnimationClipSettings settings) { +#if UNITY_5 + AnimationUtility.SetAnimationClipSettings(clip, settings); +#else MethodInfo methodInfo = typeof(AnimationUtility).GetMethod("SetAnimationClipSettings", BindingFlags.Static | BindingFlags.NonPublic); methodInfo.Invoke(null, new object[] { clip, settings }); EditorUtility.SetDirty(clip); +#endif } static AnimationClip ExtractAnimation (string name, SkeletonData skeletonData, Dictionary> slotLookup, bool bakeIK, SendMessageOptions eventOptions, AnimationClip clip = null) { @@ -753,7 +795,11 @@ public static class SkeletonBaker { AnimationUtility.SetAnimationEvents(clip, new AnimationEvent[0]); } +#if UNITY_5 + +#else AnimationUtility.SetAnimationType(clip, ModelImporterAnimationType.Generic); +#endif clip.name = name; diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs.meta index f4b6fa1c6..1e73fe1df 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonBaker.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs index 8880a09e7..83bbef004 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs @@ -528,7 +528,7 @@ public class SkeletonDataAssetInspector : Editor { if (this.m_previewUtility == null) { this.m_lastTime = Time.realtimeSinceStartup; this.m_previewUtility = new PreviewRenderUtility(true); - this.m_previewUtility.m_Camera.isOrthoGraphic = true; + this.m_previewUtility.m_Camera.orthographic = true; this.m_previewUtility.m_Camera.orthographicSize = 1; this.m_previewUtility.m_Camera.cullingMask = -2147483648; this.m_previewUtility.m_Camera.nearClipPlane = 0.01f; @@ -554,7 +554,7 @@ public class SkeletonDataAssetInspector : Editor { m_skeletonData = m_skeletonAnimation.skeletonDataAsset.GetSkeletonData(true); - m_previewInstance.renderer.enabled = false; + m_previewInstance.GetComponent().enabled = false; m_initialized = true; AdjustCameraGoals(true); @@ -624,7 +624,7 @@ public class SkeletonDataAssetInspector : Editor { GameObject go = this.m_previewInstance; - Bounds bounds = go.renderer.bounds; + Bounds bounds = go.GetComponent().bounds; m_orthoGoal = bounds.size.y; m_posGoal = bounds.center + new Vector3(0, 0, -10); @@ -661,7 +661,7 @@ public class SkeletonDataAssetInspector : Editor { GameObject go = this.m_previewInstance; if (m_requireRefresh && go != null) { - go.renderer.enabled = true; + go.GetComponent().enabled = true; if (EditorApplication.isPlaying) { //do nothing @@ -683,7 +683,7 @@ public class SkeletonDataAssetInspector : Editor { } this.m_previewUtility.m_Camera.Render(); - go.renderer.enabled = false; + go.GetComponent().enabled = false; } diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta index fba64b6e3..5a602df97 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonDataAssetInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs.meta b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs.meta index d32cc952c..d7791c681 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonRendererInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs.meta b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs.meta index 69a87c913..901111a0b 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SpineAttributeDrawers.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs.meta b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs.meta index 544e47769..858912afe 100644 --- a/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs.meta +++ b/spine-unity/Assets/spine-unity/Editor/SpineEditorUtilities.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Shaders/Bones.shader.meta b/spine-unity/Assets/spine-unity/Shaders/Bones.shader.meta index d01814ef9..17117f38a 100644 --- a/spine-unity/Assets/spine-unity/Shaders/Bones.shader.meta +++ b/spine-unity/Assets/spine-unity/Shaders/Bones.shader.meta @@ -3,3 +3,5 @@ guid: 66988de88a15abd4e8846c6805485f57 ShaderImporter: defaultTextures: [] userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.mat.meta b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.mat.meta index ef267ef07..f9a2a315e 100644 --- a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.mat.meta +++ b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.mat.meta @@ -2,3 +2,5 @@ fileFormatVersion: 2 guid: 43227e5adadc6f24bb4bf74b92a56fb4 NativeFormatImporter: userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader.meta b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader.meta index bcc031d30..01ca4ed60 100644 --- a/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader.meta +++ b/spine-unity/Assets/spine-unity/Shaders/HiddenPass.shader.meta @@ -3,3 +3,5 @@ guid: 913475501bf19374c84390868a9d6d3d ShaderImporter: defaultTextures: [] userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader.meta b/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader.meta index 753129e68..06c4b0c2a 100644 --- a/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader.meta +++ b/spine-unity/Assets/spine-unity/Shaders/Skeleton.shader.meta @@ -3,3 +3,5 @@ guid: 1e8a610c9e01c3648bac42585e5fc676 ShaderImporter: defaultTextures: [] userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/Shaders/SkeletonLit.shader.meta b/spine-unity/Assets/spine-unity/Shaders/SkeletonLit.shader.meta index a8444eec9..1d0a386de 100644 --- a/spine-unity/Assets/spine-unity/Shaders/SkeletonLit.shader.meta +++ b/spine-unity/Assets/spine-unity/Shaders/SkeletonLit.shader.meta @@ -3,3 +3,5 @@ guid: bd83c75f51f5e23498ae22ffcdfe92c3 ShaderImporter: defaultTextures: [] userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs.meta b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs.meta index f497aa7e8..23ede7bd7 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimation.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonAnimation.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta index 6572a198f..68e421f69 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonAnimationInterface.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs index 3b950c5e0..4adba2684 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs @@ -1,4 +1,38 @@ -using UnityEngine; +/****************************************************************************** + * Spine Runtimes Software License + * Version 2.1 + * + * Copyright (c) 2013, Esoteric Software + * All rights reserved. + * + * You are granted a perpetual, non-exclusive, non-sublicensable and + * non-transferable license to install, execute and perform the Spine Runtimes + * Software (the "Software") solely for internal use. Without the written + * permission of Esoteric Software (typically granted by licensing Spine), you + * may not (a) modify, translate, adapt or otherwise create derivative works, + * improvements of the Software or develop new applications using the Software + * or (b) remove, delete, alter or obscure any trademarks or any copyright, + * trademark, patent or other intellectual property or proprietary rights + * notices on or in the Software, including any copy thereof. Redistributions + * in binary or source form must include this license and terms. + * + * THIS SOFTWARE IS PROVIDED BY ESOTERIC SOFTWARE "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 SOFTARE BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) 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 THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *****************************************************************************/ + +/***************************************************************************** + * SkeletonAnimator created by Mitch Thompson + * Full irrevocable rights and permissions granted to Esoteric Software +*****************************************************************************/ +using UnityEngine; using System.Collections; using System.Collections.Generic; using Spine; @@ -69,10 +103,15 @@ public class SkeletonAnimator : SkeletonRenderer, ISkeletonAnimation { layerWeight = 1; var stateInfo = animator.GetCurrentAnimatorStateInfo(i); - var clipInfo = animator.GetCurrentAnimationClipState(i); var nextStateInfo = animator.GetNextAnimatorStateInfo(i); - var nextClipInfo = animator.GetNextAnimationClipState(i); +#if UNITY_5 + var clipInfo = animator.GetCurrentAnimatorClipInfo(i); + var nextClipInfo = animator.GetNextAnimatorClipInfo(i); +#else + var clipInfo = animator.GetCurrentAnimationClipState(i); + var nextClipInfo = animator.GetNextAnimationClipState(i); +#endif MixMode mode = layerMixModes[i]; if (mode == MixMode.AlwaysMix) { diff --git a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta index 91dba98cc..ebd50dc41 100644 --- a/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonAnimator.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta index db4f247d4..6c5a6e2fe 100644 --- a/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonDataAsset.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonExtensions.cs.meta b/spine-unity/Assets/spine-unity/SkeletonExtensions.cs.meta index 427cdd10a..0ec145755 100644 --- a/spine-unity/Assets/spine-unity/SkeletonExtensions.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonExtensions.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs index d200de45c..7a099956e 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs @@ -76,8 +76,8 @@ public class SkeletonRenderer : MonoBehaviour { public virtual void Reset () { if (meshFilter != null) meshFilter.sharedMesh = null; - if (renderer != null) - renderer.sharedMaterial = null; + if (GetComponent() != null) + GetComponent().sharedMaterial = null; if (mesh1 != null) { if (Application.isPlaying) @@ -225,7 +225,7 @@ public class SkeletonRenderer : MonoBehaviour { submeshMaterials.CopyTo(sharedMaterials); else sharedMaterials = submeshMaterials.ToArray(); - renderer.sharedMaterials = sharedMaterials; + GetComponent().sharedMaterials = sharedMaterials; // Ensure mesh data is the right size. Vector3[] vertices = this.vertices; diff --git a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs.meta b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs.meta index fff56a22b..5230098d4 100644 --- a/spine-unity/Assets/spine-unity/SkeletonRenderer.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonRenderer.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs index a6950aa84..f8d6d7340 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs @@ -246,7 +246,7 @@ public class SkeletonUtilityBoneInspector : Editor { bool CanCreateHingeChain () { if (utilityBone == null) return false; - if (utilityBone.rigidbody != null) + if (utilityBone.GetComponent() != null) return false; if (utilityBone.bone != null && utilityBone.bone.Children.Count == 0) return false; @@ -266,7 +266,7 @@ public class SkeletonUtilityBoneInspector : Editor { AttachRigidbody(utilBone); } - utilityBone.rigidbody.isKinematic = true; + utilityBone.GetComponent().isKinematic = true; foreach (var utilBone in utilBoneArr) { if (utilBone == utilityBone) @@ -276,13 +276,13 @@ public class SkeletonUtilityBoneInspector : Editor { HingeJoint joint = utilBone.gameObject.AddComponent(); joint.axis = Vector3.forward; - joint.connectedBody = utilBone.transform.parent.rigidbody; + joint.connectedBody = utilBone.transform.parent.GetComponent(); joint.useLimits = true; JointLimits limits = new JointLimits(); limits.min = -20; limits.max = 20; joint.limits = limits; - utilBone.rigidbody.mass = utilBone.transform.parent.rigidbody.mass * 0.75f; + utilBone.GetComponent().mass = utilBone.transform.parent.GetComponent().mass * 0.75f; } } diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs.meta index 340d6e2eb..81de4d605 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityBoneInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs.meta index 7820cbd6d..44e13b142 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/Editor/SkeletonUtilityInspector.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs index d880addb2..519c0e313 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs @@ -338,11 +338,11 @@ public class SkeletonUtility : MonoBehaviour { SkeletonUtilitySubmeshRenderer s = go.AddComponent(); s.sortingOrder = i * 10; s.submeshIndex = i; - s.Initialize(renderer); + s.Initialize(GetComponent()); s.Update(); } if (disablePrimaryRenderer) - renderer.enabled = false; + GetComponent().enabled = false; } } diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs.meta index 7d3d7a44f..29f2fd705 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtility.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs.meta index f66d45053..51537b4c8 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityConstraint.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityConstraint.cs.meta index dad11e0a2..b78abdc12 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityConstraint.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityConstraint.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta index 3e82746da..18e153cf2 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityEyeConstraint.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta index 5d9e6920c..e5474edbc 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityGroundConstraint.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs index 86f96e942..a636792be 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs @@ -57,7 +57,7 @@ public class SkeletonUtilityKinematicShadow : MonoBehaviour { continue; foreach (var sb in shadowBones) { - if (sb.rigidbody == null) + if (sb.GetComponent() == null) continue; if (sb.boneName == b.boneName) { @@ -72,8 +72,8 @@ public class SkeletonUtilityKinematicShadow : MonoBehaviour { } void FixedUpdate () { - shadowRoot.rigidbody.MovePosition(transform.position); - shadowRoot.rigidbody.MoveRotation(transform.rotation); + shadowRoot.GetComponent().MovePosition(transform.position); + shadowRoot.GetComponent().MoveRotation(transform.rotation); foreach (var pair in shadowTable) { pair.Value.localPosition = pair.Key.localPosition; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta index 06bcb6f4a..2b071f36f 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityKinematicShadow.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs index fc8867e6b..40e3ffbc5 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs @@ -16,7 +16,7 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour { MeshFilter parentFilter; void Awake () { - cachedRenderer = renderer; + cachedRenderer = GetComponent(); sharedMaterials = cachedRenderer.sharedMaterials; filter = GetComponent(); @@ -53,13 +53,13 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour { } if (cachedRenderer == null) - cachedRenderer = renderer; + cachedRenderer = GetComponent(); if (mesh == null || submeshIndex > mesh.subMeshCount - 1) { cachedRenderer.enabled = false; return; } else { - renderer.enabled = true; + GetComponent().enabled = true; } bool changed = false; @@ -71,7 +71,7 @@ public class SkeletonUtilitySubmeshRenderer : MonoBehaviour { - for (int i = 0; i < renderer.sharedMaterials.Length; i++) { + for (int i = 0; i < GetComponent().sharedMaterials.Length; i++) { if (i == submeshIndex) continue; diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs.meta b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs.meta index 168ca8811..a58d557e9 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs.meta +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilitySubmeshRenderer.cs.meta @@ -10,3 +10,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: diff --git a/spine-unity/Assets/spine-unity/SpineAttributes.cs.meta b/spine-unity/Assets/spine-unity/SpineAttributes.cs.meta index fe4c14b95..00a5090b1 100644 --- a/spine-unity/Assets/spine-unity/SpineAttributes.cs.meta +++ b/spine-unity/Assets/spine-unity/SpineAttributes.cs.meta @@ -6,3 +6,5 @@ MonoImporter: executionOrder: 0 icon: {instanceID: 0} userData: + assetBundleName: + assetBundleVariant: From 678296a3d7c1f244ecd251f4e26258e09ee3688a Mon Sep 17 00:00:00 2001 From: Fenrisul Date: Tue, 17 Feb 2015 18:36:56 -0800 Subject: [PATCH 6/6] Added SkeletonUtility button to SkeletonAnimatorInspector --- .../Editor/SkeletonAnimatorInspector.cs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs index e6eb7de8b..beefec4a2 100644 --- a/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs +++ b/spine-unity/Assets/spine-unity/Editor/SkeletonAnimatorInspector.cs @@ -40,10 +40,13 @@ using Spine; [CustomEditor(typeof(SkeletonAnimator))] public class SkeletonAnimatorInspector : SkeletonRendererInspector { protected SerializedProperty layerMixModes; - + protected bool isPrefab; protected override void OnEnable () { base.OnEnable(); layerMixModes = serializedObject.FindProperty("layerMixModes"); + + if (PrefabUtility.GetPrefabType(this.target) == PrefabType.Prefab) + isPrefab = true; } protected override void gui () { @@ -51,6 +54,18 @@ public class SkeletonAnimatorInspector : SkeletonRendererInspector { EditorGUILayout.PropertyField(layerMixModes, true); - serializedObject.ApplyModifiedProperties(); + SkeletonAnimator component = (SkeletonAnimator)target; + if (!component.valid) + return; + + EditorGUILayout.Space(); + + if (!isPrefab) { + if (component.GetComponent() == null) { + if (GUILayout.Button(new GUIContent("Add Skeleton Utility", SpineEditorUtilities.Icons.skeletonUtility), GUILayout.Height(30))) { + component.gameObject.AddComponent(); + } + } + } } }