public override void OnInspectorGUI() { sp = target as SpriteAnimation; var serializedObject = new UnityEditor.SerializedObject(sp); serializedObject.Update(); CacheAnimationNames (); var spAutoStart = serializedObject.FindProperty ("autoStart"); var spMode = serializedObject.FindProperty ("mode"); var spAssets = serializedObject.FindProperty ("assets"); var spSpeedRatio = serializedObject.FindProperty ("speedRatio"); EditorGUILayout.PropertyField (spAutoStart); EditorGUILayout.PropertyField (spSpeedRatio, new GUIContent("Speed Ratio: ") ); EditorGUILayout.PropertyField (spMode); EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(spAssets, true); if (EditorGUI.EndChangeCheck()) { serializedObject.ApplyModifiedProperties (); cachedAnimationNames = false; CacheAnimationNames(); int newIdx = GetSelectedAnimationIdx(); if (newIdx == -1) { SetCurrentAnimation(string.Empty); } } selectedAnimationIdx = sp.currentAnimationIdx+1; //GetSelectedAnimationIdx(); int lastAnimIdx = selectedAnimationIdx; selectedAnimationIdx = EditorGUILayout.Popup ("Selected Animation: ", selectedAnimationIdx, animationNames.ToArray ()); if (selectedAnimationIdx != lastAnimIdx) { serializedObject.ApplyModifiedProperties (); //SetSelectedAnimation(); //sp.Play(selectedAnimationIdx-1); changedAnim = true; changedAnimIdx = selectedAnimationIdx; } if (sp.currentAnimationName != null) EditorGUILayout.PropertyField ( serializedObject.FindProperty("playFrom"), new GUIContent("Play from keyframe: ") ); // draw list GUILayout.Space (20); SerializedProperty animList = serializedObject.FindProperty ("list"); float nameSize = 140; if (animList.arraySize>0) { GUILayoutOption[] options = new GUILayoutOption[2]; options[0] = GUILayout.MaxWidth(265); options[1] = GUILayout.MinWidth(265); GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); Rect itemRect = GUILayoutUtility.GetRect(200,18, options); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUI.Box(itemRect, new GUIContent(string.Empty)); itemRect.width = nameSize; EditorGUI.LabelField(itemRect, "Animation Name"); itemRect.xMin = itemRect.xMax; itemRect.width = 45; EditorGUI.LabelField(itemRect, "Index"); for (int i = 0; i < animList.arraySize; i++) { GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); itemRect = GUILayoutUtility.GetRect(200,18, options); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); itemRect.width = nameSize; GUI.Box(itemRect, new GUIContent(string.Empty)); SerializedProperty item = animList.GetArrayElementAtIndex(i); EditorGUI.LabelField(itemRect, item.FindPropertyRelative("animationName").stringValue); itemRect.xMin = itemRect.xMax; itemRect.width = 45; GUI.Box(itemRect, new GUIContent(string.Empty)); EditorGUI.LabelField(itemRect, i.ToString()); itemRect.xMin = itemRect.xMax; itemRect.width = 30; if (i>0 && GUI.Button(itemRect, "Up")) { animList.MoveArrayElement(i, i-1); if (sp.currentAnimationIdx == i) serializedObject.FindProperty("animIdx").intValue--; else if (sp.currentAnimationIdx == i-1) serializedObject.FindProperty("animIdx").intValue++; serializedObject.ApplyModifiedProperties(); return; } itemRect.xMin = itemRect.xMax; itemRect.width = 50; if (i<animList.arraySize-1 && GUI.Button(itemRect, "Down")) { animList.MoveArrayElement(i, i+1); if (sp.currentAnimationIdx == i) serializedObject.FindProperty("animIdx").intValue++; else if (sp.currentAnimationIdx == i+1) serializedObject.FindProperty("animIdx").intValue--; serializedObject.ApplyModifiedProperties(); return; } } } if (Event.current.type == EventType.Repaint && changedAnim) { changedAnim = false; sp.SetCurrentAnimation (changedAnimIdx-1); //sp.Play(changedAnimIdx-1); } if (GUI.changed) serializedObject.ApplyModifiedProperties (); }