/// <summary> /// Draws the actual inspector /// </summary> public override void OnInspectorGUI() { EditorUtility.SetDirty(target); SpriteAnimation _ = target as SpriteAnimation; //Title bar EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Frame Time (" + _.FrameTime + "/" + _.FrameTimeDivider + "=" + _.FrameTime / _.FrameTimeDivider + "s):"); _.FrameTime = EditorGUILayout.FloatField(_.FrameTime); _.FrameTimeDivider = EditorGUILayout.FloatField(_.FrameTimeDivider); } EditorGUILayout.EndHorizontal(); //The playback mode selector EditorGUILayout.BeginHorizontal(); { if (GUILayout.Toggle(_.PlaybackMode == SpriteAnimation.AnimationPlaybackMode.Loop, "Loop")) { _.PlaybackMode = SpriteAnimation.AnimationPlaybackMode.Loop; } if (GUILayout.Toggle(_.PlaybackMode == SpriteAnimation.AnimationPlaybackMode.PingPong, "Ping-Pong")) { _.PlaybackMode = SpriteAnimation.AnimationPlaybackMode.PingPong; } if (GUILayout.Toggle(_.PlaybackMode == SpriteAnimation.AnimationPlaybackMode.OneShot, "One Shot")) { _.PlaybackMode = SpriteAnimation.AnimationPlaybackMode.OneShot; } } EditorGUILayout.EndHorizontal(); GUILayout.Space(20); EditorGUILayout.LabelField("Frames"); /* * Frames */ List <SpriteAnimation.SpriteFrame> frames = _.Frames.ToList(); for (int n = 0; n < _.FrameCount; n++) { SpriteAnimation.SpriteFrame i = _.Frames[n]; if (n == _.LoopPoint && _.PlaybackMode == SpriteAnimation.AnimationPlaybackMode.Loop) { GUI.backgroundColor = Color.red; } EditorGUILayout.BeginHorizontal(); { //The thumbnail i.Sprite = EditorGUILayout.ObjectField(i.Sprite, typeof(Sprite), false, GUILayout.Width(90), GUILayout.Height(90)) as Sprite; EditorGUILayout.BeginVertical(); { //The delete button (Only shown when there this more than one frame) if (_.FrameCount > 1 && GUILayout.Button("✕", GUILayout.MaxWidth(48))) { frames.RemoveAt(n); } //The up button (Only shown when the frame is not topmost) if (n != 0 && GUILayout.Button("↑", GUILayout.MaxWidth(48))) { frames.RemoveAt(n); frames.Insert(Mathf.Max(0, n - 1), i); } //The loop button if (_.LoopPoint != n && _.PlaybackMode == SpriteAnimation.AnimationPlaybackMode.Loop && GUILayout.Button("Loop", GUILayout.MaxWidth(48))) { _.LoopPoint = n; } //The down button (Only shown when the frame is not bottommost) if (n != _.FrameCount - 1 && GUILayout.Button("↓", GUILayout.MaxWidth(48))) { frames.RemoveAt(n); frames.Insert(Mathf.Min(frames.Count, n + 1), i); } //The add button if (GUILayout.Button("+", GUILayout.MaxWidth(48))) { frames.Insert(n + 1, new SpriteAnimation.SpriteFrame()); } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); GUI.backgroundColor = Color.white; //The frame time multiplier EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Frame Time Multiplier: "); i.FrameTimeMultiplier = EditorGUILayout.FloatField(i.FrameTimeMultiplier); } EditorGUILayout.EndHorizontal(); GUILayout.Space(20); } //Updates the frames of the animation if (!_.Frames.SequenceEqual(frames)) { _.Frames = frames.ToArray(); } }
public override void OnInspectorGUI() { EditorUtility.SetDirty(target); SpriteAnimation _ = target as SpriteAnimation; EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("Frame Time (" + _.FrameTime + "/" + _.FrameTimeDivider + "=" + _.FrameTime / _.FrameTimeDivider + "s):"); _.FrameTime = EditorGUILayout.FloatField(_.FrameTime); _.FrameTimeDivider = EditorGUILayout.FloatField(_.FrameTimeDivider); EditorGUILayout.EndHorizontal(); GUILayout.Space(20); EditorGUILayout.LabelField("Frames"); List <SpriteAnimation.SpriteFrame> frames = _.Frames.ToList(); for (int n = 0; n < _.FrameCount; n++) { SpriteAnimation.SpriteFrame i = _.Frames[n]; EditorGUILayout.BeginHorizontal(); { i.Sprite = EditorGUILayout.ObjectField(i.Sprite, typeof(Sprite), false, GUILayout.Width(90), GUILayout.Height(90)) as Sprite; EditorGUILayout.BeginVertical(); { if (_.FrameCount > 1 && GUILayout.Button("X", GUILayout.MaxWidth(32))) { frames.RemoveAt(n); } if (GUILayout.Button("^", GUILayout.MaxWidth(32))) { frames.RemoveAt(n); frames.Insert(Mathf.Max(0, n - 1), i); } if (GUILayout.Button("v", GUILayout.MaxWidth(32))) { frames.RemoveAt(n); frames.Insert(Mathf.Min(frames.Count, n + 1), i); } if (GUILayout.Button("+", GUILayout.MaxWidth(32))) { frames.Insert(n + 1, new SpriteAnimation.SpriteFrame()); } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("Frame Time Multiplier: "); i.FrameTimeMultiplier = EditorGUILayout.FloatField(i.FrameTimeMultiplier); } EditorGUILayout.EndHorizontal(); if (!_.Frames.SequenceEqual(frames)) { _.Frames = frames.ToArray(); } GUILayout.Space(20); } }