[spine-unity] Better BoneFollower editor warnings.

This commit is contained in:
John 2016-07-05 16:12:21 +08:00 committed by GitHub
parent 94df4cb5be
commit c7b6966055

View File

@ -36,7 +36,7 @@ namespace Spine.Unity.Editor {
[CustomEditor(typeof(BoneFollower))] [CustomEditor(typeof(BoneFollower))]
public class BoneFollowerInspector : UnityEditor.Editor { public class BoneFollowerInspector : UnityEditor.Editor {
SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation; SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation;
BoneFollower component; BoneFollower targetBoneFollower;
bool needsReset; bool needsReset;
void OnEnable () { void OnEnable () {
@ -45,24 +45,23 @@ namespace Spine.Unity.Editor {
followBoneRotation = serializedObject.FindProperty("followBoneRotation"); followBoneRotation = serializedObject.FindProperty("followBoneRotation");
followZPosition = serializedObject.FindProperty("followZPosition"); followZPosition = serializedObject.FindProperty("followZPosition");
component = (BoneFollower)target; targetBoneFollower = (BoneFollower)target;
if (component.SkeletonRenderer != null) if (targetBoneFollower.SkeletonRenderer != null)
component.SkeletonRenderer.Initialize(false); targetBoneFollower.SkeletonRenderer.Initialize(false);
} }
override public void OnInspectorGUI () { override public void OnInspectorGUI () {
if (needsReset) { if (needsReset) {
component.Initialize(); targetBoneFollower.Initialize();
component.LateUpdate(); targetBoneFollower.LateUpdate();
needsReset = false; needsReset = false;
SceneView.RepaintAll(); SceneView.RepaintAll();
} }
serializedObject.Update(); serializedObject.Update();
// FindRenderer() // Find Renderer
if (skeletonRenderer.objectReferenceValue == null) { if (skeletonRenderer.objectReferenceValue == null) {
SkeletonRenderer parentRenderer = BoneFollowerInspector.GetInParent<SkeletonRenderer>(component.transform); SkeletonRenderer parentRenderer = BoneFollowerInspector.GetInParent<SkeletonRenderer>(targetBoneFollower.transform);
if (parentRenderer != null) { if (parentRenderer != null) {
Debug.Log("Inspector automatically assigned BoneFollower.SkeletonRenderer"); Debug.Log("Inspector automatically assigned BoneFollower.SkeletonRenderer");
skeletonRenderer.objectReferenceValue = parentRenderer; skeletonRenderer.objectReferenceValue = parentRenderer;
@ -71,7 +70,7 @@ namespace Spine.Unity.Editor {
EditorGUILayout.PropertyField(skeletonRenderer); EditorGUILayout.PropertyField(skeletonRenderer);
if (component.valid) { if (targetBoneFollower.valid) {
EditorGUI.BeginChangeCheck(); EditorGUI.BeginChangeCheck();
EditorGUILayout.PropertyField(boneName); EditorGUILayout.PropertyField(boneName);
if (EditorGUI.EndChangeCheck()) { if (EditorGUI.EndChangeCheck()) {
@ -79,18 +78,27 @@ namespace Spine.Unity.Editor {
needsReset = true; needsReset = true;
serializedObject.Update(); serializedObject.Update();
} }
EditorGUILayout.PropertyField(followBoneRotation); EditorGUILayout.PropertyField(followBoneRotation);
EditorGUILayout.PropertyField(followZPosition); EditorGUILayout.PropertyField(followZPosition);
} else { } else {
GUILayout.Label("INVALID"); var boneFollowerSkeletonRenderer = targetBoneFollower.skeletonRenderer;
if (boneFollowerSkeletonRenderer == null) {
EditorGUILayout.HelpBox("SkeletonRenderer is unassigned. Please assign a SkeletonRenderer (SkeletonAnimation or SkeletonAnimator).", MessageType.Warning);
} else {
boneFollowerSkeletonRenderer.Initialize(false);
if (boneFollowerSkeletonRenderer.skeletonDataAsset == null)
EditorGUILayout.HelpBox("Assigned SkeletonRenderer does not have SkeletonData assigned to it.", MessageType.Warning);
if (!boneFollowerSkeletonRenderer.valid)
EditorGUILayout.HelpBox("Assigned SkeletonRenderer is invalid. Check target SkeletonRenderer, its SkeletonDataAsset or the console for other errors.", MessageType.Warning);
}
} }
if (serializedObject.ApplyModifiedProperties() || var current = UnityEngine.Event.current;
(UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed") bool wasUndo = (current.type == EventType.ValidateCommand && current.commandName == "UndoRedoPerformed");
) { if (serializedObject.ApplyModifiedProperties() || wasUndo)
component.Initialize(); targetBoneFollower.Initialize();
}
} }
public static T GetInParent<T> (Transform origin) where T : Component { public static T GetInParent<T> (Transform origin) where T : Component {
@ -101,7 +109,6 @@ namespace Spine.Unity.Editor {
if(parent == null) if(parent == null)
return default(T); return default(T);
} }
return parent.GetComponent<T>(); return parent.GetComponent<T>();
#else #else
return origin.GetComponentInParent<T>(); return origin.GetComponentInParent<T>();