123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using Sirenix.OdinInspector;
- using System;
- using System.Linq;
- namespace ChivaXR
- {
- /// <summary>
- /// 动画数据管理器
- /// </summary>
- public class AnimationManager : SerializedMonoSingleton<AnimationManager>
- {
- private GameObject animationActiveObj;
- public GameObject AnimationActiveObj { get; set; }
- [TableList(AlwaysExpanded = true, MaxScrollViewHeight = 300)]
- public List<AniDataContainer> animationDatas = new List<AniDataContainer>();
- [HideInInspector]
- public Dictionary<string, AniData> aniDatasDic = new Dictionary<string, AniData>();
- public void AniDataReName(AniDataContainer aniDataContainer, string reName)
- {
- aniDataContainer.aniData.aniName = reName;
- aniDataContainer.AniDataName = reName; ;
- RefreshDataInfo();
- }
- public void DeletaAniData(AniDataContainer aniDataContainer, string reName)
- {
- if (aniDataContainer.aniData != null)
- {
- DestroyImmediate(aniDataContainer.aniData.gameObject);
- }
- if(animationDatas.Contains(aniDataContainer))
- {
- animationDatas.Remove(aniDataContainer);
- }
- RefreshDataInfo();
- }
- /// <summary>
- /// 播放动画片段
- /// </summary>
- /// <param name="aniDataName"></param>
- public void PlayAniData(string aniDataName, Action finishedCallBack = null)
- {
- if (animationDatas.Where(s => s.AniDataName.Equals(aniDataName)).Count() > 0)
- {
- AniDataContainer tempAniData = animationDatas.Where(s => s.AniDataName.Equals(aniDataName)).First();
- tempAniData.aniData.PlayData(finishedCallBack);
- }
- else
- {
- Debug.LogError("无该动画片段--->" + aniDataName);
- finishedCallBack?.Invoke();
- }
- }
- /// <summary>
- /// 添加动画数据
- /// </summary>
- /// <param name="data"></param>
- public bool RegisterAniData(AniData data)
- {
- if (animationDatas.Where(s => s.aniData == data).Count() == 0)
- {
- animationDatas.Add(new AniDataContainer(data));
- RefreshDataInfo();
- return true;
- }
- return false;
- }
- /// <summary>
- /// 移除动画数据
- /// </summary>
- /// <param name="data"></param>
- public bool RemoveAniData(AniData data)
- {
- if (animationDatas.Where(s => s.aniData == data).Count() > 0)
- {
- AniDataContainer tempContainer = animationDatas.Where(s => s.aniData == data).First();
- animationDatas.Remove(tempContainer);
- RefreshDataInfo();
- return true;
- }
- return false;
- }
- [Button("刷新动画信息")]
- public void RefreshDataInfo()
- {
- aniDatasDic.Clear();
- RefreshDefaultNoAni();
- for (int i = 0; i < animationDatas.Count; i++)
- {
- animationDatas[i].Refresh();
- if (animationDatas[i].aniData == null)
- {
- Debug.LogError(animationDatas[i].AniDataName + "该动画引用丢失,移除AnimationManager");
- animationDatas.Remove(animationDatas[i]);
- i--;
- }
- if (aniDatasDic.ContainsKey(animationDatas[i].AniDataName))
- {
- Debug.LogError(animationDatas[i].AniDataName + "当前操作名称重复");
- }
- else
- {
- aniDatasDic.Add(animationDatas[i].AniDataName, animationDatas[i].aniData);
- }
- }
- }
- public void RefreshDefaultNoAni()
- {
- if (animationDatas.Where(s => s.AniDataName == "defalut/无动画").Count() == 0)
- {
- AniData defalutAni = new GameObject("defalut/无动画").AddComponent<AniData>();
- defalutAni.aniName = "defalut/无动画";
- defalutAni.transform.parent = this.transform;
- animationDatas.Insert(0, new AniDataContainer(defalutAni));
- }
- }
- private AniData GetAniDataByName(string name)
- {
- if (animationDatas.Where(s => s.AniDataName == name).Count() > 0)
- {
- return animationDatas.Where(s => s.AniDataName == name).First().aniData;
- }
- return null;
- }
- public AniData GetAniData(string aniName)
- {
- if (aniDatasDic.ContainsKey(aniName))
- {
- return aniDatasDic[aniName];
- }
- AniData tempOp = GetAniDataByName(aniName);
- if (tempOp != null)
- {
- aniDatasDic.Add(aniName, tempOp);
- return tempOp;
- }
- Debug.LogError(aniName + "当前动画名未注册");
- return null;
- }
- [ContextMenu("设置MoveByPath移动时间")]
- public void SetAniSpeed()
- {
- foreach (var item in animationDatas)
- {
- foreach (var aniDriver in item.aniData.AnimationDriverDatas)
- {
- if ((aniDriver as AniDriver_MoveByPath) != null)
- {
- (aniDriver as AniDriver_MoveByPath).duration =2f;
- Debug.Log(item.AniDataName + "设置成功");
- }else
- {
- Debug.Log(item.AniDataName +"转换为空");
- }
- }
- }
- }
- }
- [Serializable]
- public class AniDataContainer
- {
- [ReadOnly]
- [HideLabel]
- [HorizontalGroup("动画信息")]
- public string AniDataName;
- [ReadOnly]
- [HideInInspector]
- public string Description;
- [HideLabel]
- [HorizontalGroup("动画信息")]
- public AniData aniData;
- public AniDataContainer(AniData data)
- {
- aniData = data;
- AniDataName = data.aniName;
- Description = data.aniDescriptioin;
- }
- public void Refresh()
- {
- AniDataName = aniData.aniName;
- Description = aniData.aniDescriptioin;
- }
- [TableColumnWidth(60)]
- [HorizontalGroup("动画状态")]
- [Button("初始状态")]
- [GUIColor("InitStateColor")]
- public void SetInitState()
- {
- if (aniData)
- {
- aniData.SetInitState();
- }
- }
- [TableColumnWidth(60)]
- [HorizontalGroup("动画状态")]
- [Button("结束状态")]
- [GUIColor("FinishedStateColor")]
- public void SetFinishedState()
- {
- if (aniData)
- {
- aniData.SetFinishedState();
- }
- }
- private Color FinishedStateColor()
- {
- switch (aniData.currentAniState)
- {
- case Animation_State.finishedState:
- return new Color(0.7f, 1f, 0.7f);
- }
- return GUI.color;
- }
- private Color InitStateColor()
- {
- if (aniData != null)
- {
- switch (aniData.currentAniState)
- {
- case Animation_State.initState:
- return new Color(0.7f, 1f, 0.7f);
- }
- }
- return GUI.color;
- }
- }
- }
|