AniDriver_SetUnityAnimationPose.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using ChivaXR;
  5. using Sirenix.OdinInspector;
  6. using System;
  7. public class AniDriver_SetUnityAnimationPose : AnimationDriverBase
  8. {
  9. public Animation animation;
  10. [ValueDropdown("GetAllAnimationNames")]
  11. public string aniName;
  12. public float initNormalize = 0;
  13. public float finishedNormalize = 1;
  14. public float speed = 1;
  15. public bool isPlay = false;
  16. public override void FinishedState()
  17. {
  18. AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, finishedNormalize);
  19. }
  20. public override void InitState()
  21. {
  22. AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, initNormalize);
  23. }
  24. public override void StartPlay(Action finishedCallBack = null)
  25. {
  26. if (isPlay)
  27. {
  28. AnimationToolkit.SetAnimationNormalizedToPlay(animation, aniName, initNormalize, speed);
  29. float waitTime = 0;
  30. AnimationState _aniState = animation[aniName];
  31. if (speed == 0) { waitTime = 0; }
  32. else if (speed > 0)
  33. {
  34. waitTime = (1 - initNormalize) * _aniState.length / speed;
  35. }
  36. else
  37. {
  38. waitTime = (initNormalize) * _aniState.length / Mathf.Abs(speed);
  39. }
  40. SetIEnumeratorActionCallBackByTime(finishedCallBack, waitTime);
  41. }
  42. else
  43. {
  44. AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, finishedNormalize);
  45. finishedCallBack?.Invoke();
  46. }
  47. }
  48. private IEnumerable GetAllAnimationNames()
  49. {
  50. List<ValueDropdownItem> item = new List<ValueDropdownItem>();
  51. if (animation != null)
  52. {
  53. foreach (AnimationState state in animation)
  54. {
  55. item.Add(new ValueDropdownItem(state.name, state.name));
  56. }
  57. }
  58. return item;
  59. }
  60. /// <summary>
  61. /// 协程等待时间执行委托
  62. /// </summary>
  63. /// <param name="callBack"></param>
  64. /// <param name="time"></param>
  65. public static void SetIEnumeratorActionCallBackByTime(Action callBack, float time)
  66. {
  67. AnimationCoroutine.Instance.StartCoroutine(UnityAcitionCallBackByTime(callBack, time));
  68. //ChivaTech.ChivaUtils.Singletons.Coroutine.Instance.StartCoroutine(UnityAcitionCallBackByTime(callBack, time));
  69. }
  70. static IEnumerator UnityAcitionCallBackByTime(Action callBack, float time)
  71. {
  72. yield return new WaitForSeconds(time);
  73. callBack?.Invoke();
  74. }
  75. }