using Sirenix.OdinInspector; using System.Collections; using System.Collections.Generic; using UnityEngine; using ChivaXR; using System; using System.Linq; public class AniData : SerializedMonoBehaviour { [LabelText("动画名称")] public string aniName; [LabelText("动画描述")] [TextArea] public string aniDescriptioin; [Header("动画数据")] [TypeFilter("GetFilteredTypeList")] public List AnimationDriverDatas = new List(); public bool isRegister = false; public ChivaXR.Animation_State currentAniState; public IEnumerable GetFilteredTypeList() { var q = typeof(AnimationDriverBase).Assembly.GetTypes() .Where(x => !x.IsAbstract) .Where(x => !x.IsGenericTypeDefinition) .Where(x => typeof(AnimationDriverBase).IsAssignableFrom(x)); return q; } [HorizontalGroup("AniState")] [Button("初始状态")] [GUIColor("InitStateColor")] public void SetInitState() { AnimationDriver.SetAniDriversState(AnimationDriverDatas.ToArray(), ChivaXR.Animation_State.initState); currentAniState = ChivaXR.Animation_State.initState; } [HorizontalGroup("AniState")] [Button("结束状态")] [GUIColor("FinishedStateColor")] public void SetFinishedState() { AnimationDriver.SetAniDriversState(AnimationDriverDatas.ToArray(), ChivaXR.Animation_State.finishedState); currentAniState = ChivaXR.Animation_State.finishedState; } [HideIf("isRegister")] [Button("注册动画信息")] public void RegisterData() { isRegister = AnimationManager.Instance.RegisterAniData(this); } [ShowIf("isRegister")] [Button("移除注册信息")] public void RemoveRegisterData() { isRegister = !AnimationManager.Instance.RemoveAniData(this); } public void PlayData(Action finishCallBack=null) { AnimationDriver.PlayAniDrivers(AnimationDriverDatas.ToArray(), finishCallBack); } private Color FinishedStateColor() { switch (currentAniState) { case Animation_State.finishedState: return new Color(0.7f, 1f, 0.7f); } return GUI.color; } private Color InitStateColor() { switch (currentAniState) { case Animation_State.initState: return new Color(0.7f, 1f, 0.7f); } return GUI.color; } /// /// 自动填写对应的信息 /// [ContextMenu("自动填写名称及描述")] public void FillInInfo() { aniName = transform.name; aniDescriptioin = transform.name.Split('_').Length <= 1 ? transform.name : transform.name.Split('_')[1]; } }