205 lines
7.6 KiB
C#
205 lines
7.6 KiB
C#
|
using UnityEngine;
|
|||
|
using UnityEditor;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using DG.Tweening;
|
|||
|
|
|||
|
[CustomEditor(typeof(AnimationUI))]
|
|||
|
public class AnimationUIEditor : Editor
|
|||
|
{
|
|||
|
private List<bool> foldouts = new List<bool>(); // <20>洢<EFBFBD>۵<EFBFBD>״̬
|
|||
|
string[] OnenableOpens = new string[] { "һ<><D2BB><EFBFBD>ѾͲ<D1BE><CDB2><EFBFBD>", "<22><>ť<EFBFBD><C5A5><EFBFBD><EFBFBD>","<22><>ʧǰ<CAA7><C7B0><EFBFBD><EFBFBD>" };
|
|||
|
string[] loopTypeOptions = new string[] { "<22><><EFBFBD>¿<EFBFBD>ʼ", "<22><><EFBFBD><EFBFBD>", "<22><><EFBFBD><EFBFBD>" };
|
|||
|
public override void OnInspectorGUI()
|
|||
|
{
|
|||
|
// <20><>ȡĿ<C8A1><C4BF><EFBFBD>ű<EFBFBD><C5B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
AnimationUI myScript = (AnimationUI)target;
|
|||
|
|
|||
|
EditorGUILayout.Space();
|
|||
|
|
|||
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD>۵<EFBFBD><DBB5>б<EFBFBD><D0B1>Ĵ<EFBFBD>С
|
|||
|
EnsureFoldoutListSize(myScript);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫɾ<D2AA><C9BE>ij<EFBFBD><C4B3>Ч<EFBFBD><D0A7>
|
|||
|
int deleteIndex = -1;
|
|||
|
bool isAnimationEffect = false; // <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
|
|||
|
// <20>ϲ<EFBFBD> uiAnimationEffects <20><> uiShakeEffects <20><><EFBFBD><EFBFBD> ListIndex <20><><EFBFBD><EFBFBD>
|
|||
|
List<BaseUIEffect> sortedEffects = new List<BaseUIEffect>();
|
|||
|
sortedEffects.AddRange(myScript.uiAnimationEffects);
|
|||
|
sortedEffects.AddRange(myScript.uiShakeEffects);
|
|||
|
sortedEffects = sortedEffects.OrderBy(effect => effect.ListIndex).ToList(); // <20><> ListIndex <20><><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>б<EFBFBD>
|
|||
|
for (int i = 0; i < sortedEffects.Count; i++)
|
|||
|
{
|
|||
|
BaseUIEffect effect = sortedEffects[i];
|
|||
|
|
|||
|
// <20>۵<EFBFBD><DBB5><EFBFBD>
|
|||
|
foldouts[i] = EditorGUILayout.Foldout(foldouts[i], $"UI<55><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> {effect.ListIndex}");
|
|||
|
|
|||
|
if (foldouts[i])
|
|||
|
{
|
|||
|
EditorGUILayout.BeginVertical(GUI.skin.box);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD> UIAnimationEffect
|
|||
|
if (effect is UIAnimationEffect uiAnimationEffect)
|
|||
|
{
|
|||
|
uiAnimationEffect.animationType = (UIAnimationEffect.AnimationType)EditorGUILayout.EnumPopup("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", uiAnimationEffect.animationType);
|
|||
|
|
|||
|
uiAnimationEffect.duration = EditorGUILayout.FloatField("<22><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>", uiAnimationEffect.duration);
|
|||
|
uiAnimationEffect.easeType = (Ease)EditorGUILayout.EnumPopup("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", uiAnimationEffect.easeType);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB8><EFBFBD>ȶ<EFBFBD><C8B6><EFBFBD><EFBFBD><EFBFBD>Fade<64><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<CABE><CDB8><EFBFBD><EFBFBD>ֵ
|
|||
|
if (uiAnimationEffect.animationType == UIAnimationEffect.AnimationType.Fade)
|
|||
|
{
|
|||
|
uiAnimationEffect.targetAlpha = EditorGUILayout.FloatField("Ŀ<><C4BF><EFBFBD><CDB8><EFBFBD><EFBFBD>", uiAnimationEffect.targetAlpha);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
uiAnimationEffect.targetValue = EditorGUILayout.Vector3Field("Ŀ<><C4BF>ֵ", uiAnimationEffect.targetValue);
|
|||
|
}
|
|||
|
}
|
|||
|
// <20><><EFBFBD><EFBFBD> UIShakeEffect
|
|||
|
else if (effect is UIShakeEffect uiShakeEffect)
|
|||
|
{
|
|||
|
uiShakeEffect.shakeType = (UIShakeEffect.ShakeType)EditorGUILayout.EnumPopup("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", uiShakeEffect.shakeType);
|
|||
|
uiShakeEffect.strength = EditorGUILayout.Vector3Field("<22><><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF>", uiShakeEffect.strength);
|
|||
|
uiShakeEffect.vibrato = EditorGUILayout.IntField("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", uiShakeEffect.vibrato);
|
|||
|
uiShakeEffect.randomness = EditorGUILayout.FloatField("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", uiShakeEffect.randomness);
|
|||
|
uiShakeEffect.duration = EditorGUILayout.FloatField("<22><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>", uiShakeEffect.duration);
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD> ListIndex
|
|||
|
effect.ListIndex = EditorGUILayout.IntField("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", effect.ListIndex);
|
|||
|
|
|||
|
if (GUILayout.Button("ɾ<><C9BE><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>"))
|
|||
|
{
|
|||
|
deleteIndex = i;
|
|||
|
isAnimationEffect = effect is UIAnimationEffect;
|
|||
|
}
|
|||
|
|
|||
|
EditorGUILayout.EndVertical();
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
myScript.animationSequenceNeedsUpdate = true;
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ɾ<EFBFBD><C9BE>Ч<EFBFBD><D0A7>
|
|||
|
if (deleteIndex >= 0)
|
|||
|
{
|
|||
|
BaseUIEffect effectToDelete = sortedEffects[deleteIndex];
|
|||
|
if (isAnimationEffect)
|
|||
|
{
|
|||
|
myScript.uiAnimationEffects.Remove((UIAnimationEffect)effectToDelete);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
myScript.uiShakeEffects.Remove((UIShakeEffect)effectToDelete);
|
|||
|
}
|
|||
|
foldouts.RemoveAt(deleteIndex); // ͬʱ<CDAC>Ƴ<EFBFBD><C6B3>۵<EFBFBD>״̬
|
|||
|
}
|
|||
|
|
|||
|
EditorGUILayout.Space();
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ų<EFBFBD><C5B2><EFBFBD>
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
// <20><>¼<EFBFBD>ɵ<EFBFBD> loopEntireSequence ֵ
|
|||
|
bool previousLoopEntireSequence = myScript.loopEntireSequence;
|
|||
|
|
|||
|
// <20><>ͬһ<CDAC><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ "<22>Ƿ<EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" <20><> "<22>Զ<EFBFBD><D4B6><EFBFBD>ѭ<EFBFBD><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>" (<28>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|||
|
myScript.loopEntireSequence = EditorGUILayout.Toggle(new GUIContent("ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), myScript.loopEntireSequence);
|
|||
|
// <20><><EFBFBD><EFBFBD> loopEntireSequence <20>ı<EFBFBD><C4B1>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if (myScript.loopEntireSequence != previousLoopEntireSequence)
|
|||
|
{
|
|||
|
myScript.animationSequenceNeedsUpdate = true;
|
|||
|
Debug.Log("ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1><EFBFBD>Ѹ<EFBFBD><D1B8>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>");
|
|||
|
}
|
|||
|
|
|||
|
// ͨ<><CDA8><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ LoopType
|
|||
|
LoopType selectedLoopType = myScript.sequenceLoopType;
|
|||
|
|
|||
|
int selectedIndex = EditorGUILayout.Popup(new GUIContent("ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"), (int)selectedLoopType, loopTypeOptions);
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
myScript.OnenableOpen = EditorGUILayout.Popup(new GUIContent("<22><><EFBFBD><EFBFBD>ģʽ"), myScript.OnenableOpen,OnenableOpens);
|
|||
|
if (GUILayout.Button("<22><>λ"))
|
|||
|
{
|
|||
|
myScript.RestartAnimations();
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD> LoopType <20>ı<EFBFBD><C4B1>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>¶<EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
if ((LoopType)selectedIndex != myScript.sequenceLoopType)
|
|||
|
{
|
|||
|
myScript.sequenceLoopType = (LoopType)selectedIndex;
|
|||
|
myScript.animationSequenceNeedsUpdate = true;
|
|||
|
Debug.Log("ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѹ<EFBFBD><D1B8>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>");
|
|||
|
}
|
|||
|
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
EditorGUILayout.Space();
|
|||
|
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UI<55><49><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ť
|
|||
|
if (GUILayout.Button("<22><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>UI<55><49><EFBFBD><EFBFBD>"))
|
|||
|
{
|
|||
|
AddUIAnimationEffect(myScript);
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UI<55><49><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD>İ<EFBFBD>ť
|
|||
|
if (GUILayout.Button("<22><><EFBFBD><EFBFBD>UI<55><49><EFBFBD><EFBFBD>"))
|
|||
|
{
|
|||
|
AddUIShakeEffect(myScript);
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
EditorGUILayout.BeginHorizontal();
|
|||
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>UI<55><49><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ť
|
|||
|
if (GUILayout.Button("<22><><EFBFBD><EFBFBD>"))
|
|||
|
{
|
|||
|
myScript.PlayUIAnimations();
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣUI<55><49><EFBFBD><EFBFBD><EFBFBD>İ<EFBFBD>ť
|
|||
|
if (GUILayout.Button("<22><>ͣ"))
|
|||
|
{
|
|||
|
myScript.StopUIAnimations();
|
|||
|
}
|
|||
|
EditorGUILayout.EndHorizontal();
|
|||
|
|
|||
|
EditorUtility.SetDirty(myScript); // <20><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ģ<DEB8>ȷ<EFBFBD><C8B7>Unity<74><79><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> UIAnimationEffect
|
|||
|
private void AddUIAnimationEffect(AnimationUI script)
|
|||
|
{
|
|||
|
UIAnimationEffect newEffect = new UIAnimationEffect();
|
|||
|
script.uiAnimationEffects.Add(newEffect);
|
|||
|
foldouts.Add(true); // Ĭ<><C4AC>չ<EFBFBD><D5B9><EFBFBD>µ<EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
script.animationSequenceNeedsUpdate = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD> UIShakeEffect
|
|||
|
private void AddUIShakeEffect(AnimationUI script)
|
|||
|
{
|
|||
|
UIShakeEffect newEffect = new UIShakeEffect();
|
|||
|
script.uiShakeEffects.Add(newEffect);
|
|||
|
foldouts.Add(true); // Ĭ<><C4AC>չ<EFBFBD><D5B9><EFBFBD>µ<EFBFBD>Ч<EFBFBD><D0A7>
|
|||
|
script.animationSequenceNeedsUpdate = true; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
|
|||
|
// ȷ<><C8B7><EFBFBD>۵<EFBFBD><DBB5>б<EFBFBD><D0B1>Ĵ<EFBFBD>С<EFBFBD><D0A1>Ч<EFBFBD><D0A7><EFBFBD>б<EFBFBD>ƥ<EFBFBD><C6A5>
|
|||
|
private void EnsureFoldoutListSize(AnimationUI script)
|
|||
|
{
|
|||
|
int totalEffects = script.uiAnimationEffects.Count + script.uiShakeEffects.Count;
|
|||
|
while (foldouts.Count < totalEffects)
|
|||
|
{
|
|||
|
foldouts.Add(true); // Ĭ<><C4AC>չ<EFBFBD><D5B9>
|
|||
|
}
|
|||
|
}
|
|||
|
}
|