public override void OnInspectorGUI() { serializedObject.Update(); GUILayout.Space(30); GUI.DrawTexture(new Rect(0, 2, 100, 26), logo, ScaleMode.StretchToFill, true); var chain = (target as AnimationLink).Animation; chain.TimeScale = EditorGUILayout.FloatField("Time Scale", chain.TimeScale); chain.RepeatCount = EditorGUILayout.IntField("Repeat Count", chain.RepeatCount); try { var i = 0; foreach (var sa in chain.Sequence) { singleAnimation = sa; GUILayout.Space(10); EditorGUILayout.BeginVertical(EditorStyles.helpBox); EditorGUILayout.BeginHorizontal(); EditorGUILayout.HelpBox("Animation " + (++i), MessageType.None); if (GUILayout.Button("X", GUILayout.Width(20))) { (this.target as AnimationLink).Animation.Sequence.Remove(sa); EditorUtility.SetDirty(this.target); break; } EditorGUILayout.EndHorizontal(); DrawSingleAnimation(singleAnimation); EditorGUILayout.EndVertical(); } }catch { //deleted animation } GUILayout.Space(20); if (GUILayout.Button("Add Chain Animation")) { var sa = new SingleAnimation(); chain.Sequence.Add(sa); foldout = sa; EditorUtility.SetDirty(target); } serializedObject.ApplyModifiedProperties(); // EditorUtility.SetDirty(target); }
public void DrawSingleAnimation(SingleAnimation target) { var title = target.Animations.Count > 0 ? "" : "Empty"; foreach (BaseAnimation a in target.Animations) { title += a.GetType().Name + " + "; } title = title.TrimEnd(' ', '+'); var style = new GUIStyle(EditorStyles.foldout); style.margin = new RectOffset(15, 0, 0, 0); if (EditorGUILayout.Foldout(foldout == target, title, true, style)) { foldout = target; target.TimeScale = EditorGUILayout.FloatField("Time Scale", target.TimeScale); target.RepeatCount = EditorGUILayout.IntField("Repeat Count", target.RepeatCount); try { foreach (BaseAnimation a in target.Animations) { GUILayout.Space(10); switch (a.GetType().Name) { case nameof(SlideAnimation): DrawGUI(a as SlideAnimation); break; case nameof(OffsetAnimation): DrawGUI(a as OffsetAnimation); break; case nameof(ScaleAnimation): DrawGUI(a as ScaleAnimation); break; case nameof(RotateAnimation): DrawGUI(a as RotateAnimation); break; case nameof(FadeAnimation): DrawGUI(a as FadeAnimation); break; } } } catch { //deleted animation } if (target.Animations.Count > 0) { GUILayout.Space(30); } GUILayout.Label("Add Animation:"); GUILayout.BeginHorizontal(); if (GUILayout.Button("Slide")) { var a = new SlideAnimation(); (target as SingleAnimation).Animations.Add(a); EditorUtility.SetDirty(this.target); } if (GUILayout.Button("Scale")) { var a = new ScaleAnimation(); (target as SingleAnimation).Animations.Add(a); EditorUtility.SetDirty(this.target); } if (GUILayout.Button("Offset")) { var a = new OffsetAnimation(); (target as SingleAnimation).Animations.Add(a); EditorUtility.SetDirty(this.target); } if (GUILayout.Button("Rotate")) { var a = new RotateAnimation(); (target as SingleAnimation).Animations.Add(a); EditorUtility.SetDirty(this.target); } if (GUILayout.Button("Fade")) { var a = new FadeAnimation(); (target as SingleAnimation).Animations.Add(a); EditorUtility.SetDirty(this.target); } GUILayout.EndHorizontal(); } else { if (foldout == target) { foldout = null; } } }