AniData.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Sirenix.OdinInspector;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using ChivaXR;
  6. using System;
  7. using System.Linq;
  8. public class AniData : SerializedMonoBehaviour
  9. {
  10. [LabelText("动画名称")]
  11. public string aniName;
  12. [LabelText("动画描述")]
  13. [TextArea]
  14. public string aniDescriptioin;
  15. [Header("动画数据")]
  16. [TypeFilter("GetFilteredTypeList")]
  17. public List<AnimationDriverBase> AnimationDriverDatas = new List<AnimationDriverBase>();
  18. public bool isRegister = false;
  19. public ChivaXR.Animation_State currentAniState;
  20. public IEnumerable<Type> GetFilteredTypeList()
  21. {
  22. var q = typeof(AnimationDriverBase).Assembly.GetTypes()
  23. .Where(x => !x.IsAbstract)
  24. .Where(x => !x.IsGenericTypeDefinition)
  25. .Where(x => typeof(AnimationDriverBase).IsAssignableFrom(x));
  26. return q;
  27. }
  28. [HorizontalGroup("AniState")]
  29. [Button("初始状态")]
  30. [GUIColor("InitStateColor")]
  31. public void SetInitState()
  32. {
  33. AnimationDriver.SetAniDriversState(AnimationDriverDatas.ToArray(), ChivaXR.Animation_State.initState);
  34. currentAniState = ChivaXR.Animation_State.initState;
  35. }
  36. [HorizontalGroup("AniState")]
  37. [Button("结束状态")]
  38. [GUIColor("FinishedStateColor")]
  39. public void SetFinishedState()
  40. {
  41. AnimationDriver.SetAniDriversState(AnimationDriverDatas.ToArray(), ChivaXR.Animation_State.finishedState);
  42. currentAniState = ChivaXR.Animation_State.finishedState;
  43. }
  44. [HideIf("isRegister")]
  45. [Button("注册动画信息")]
  46. public void RegisterData()
  47. {
  48. isRegister = AnimationManager.Instance.RegisterAniData(this);
  49. }
  50. [ShowIf("isRegister")]
  51. [Button("移除注册信息")]
  52. public void RemoveRegisterData()
  53. {
  54. isRegister = !AnimationManager.Instance.RemoveAniData(this);
  55. }
  56. public void PlayData(Action finishCallBack=null)
  57. {
  58. AnimationDriver.PlayAniDrivers(AnimationDriverDatas.ToArray(), finishCallBack);
  59. }
  60. private Color FinishedStateColor()
  61. {
  62. switch (currentAniState)
  63. {
  64. case Animation_State.finishedState:
  65. return new Color(0.7f, 1f, 0.7f);
  66. }
  67. return GUI.color;
  68. }
  69. private Color InitStateColor()
  70. {
  71. switch (currentAniState)
  72. {
  73. case Animation_State.initState:
  74. return new Color(0.7f, 1f, 0.7f);
  75. }
  76. return GUI.color;
  77. }
  78. /// <summary>
  79. /// 自动填写对应的信息
  80. /// </summary>
  81. [ContextMenu("自动填写名称及描述")]
  82. public void FillInInfo()
  83. {
  84. aniName = transform.name;
  85. aniDescriptioin = transform.name.Split('_').Length <= 1 ? transform.name : transform.name.Split('_')[1];
  86. }
  87. }