12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using ChivaXR;
- using Sirenix.OdinInspector;
- using System;
- public class AniDriver_SetUnityAnimationPose : AnimationDriverBase
- {
- public Animation animation;
- [ValueDropdown("GetAllAnimationNames")]
- public string aniName;
- public float initNormalize = 0;
- public float finishedNormalize = 1;
- public float speed = 1;
- public bool isPlay = false;
- public override void FinishedState()
- {
- AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, finishedNormalize);
- }
- public override void InitState()
- {
- AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, initNormalize);
- }
- public override void StartPlay(Action finishedCallBack = null)
- {
- if (isPlay)
- {
- AnimationToolkit.SetAnimationNormalizedToPlay(animation, aniName, initNormalize, speed);
- float waitTime = 0;
- AnimationState _aniState = animation[aniName];
- if (speed == 0) { waitTime = 0; }
- else if (speed > 0)
- {
- waitTime = (1 - initNormalize) * _aniState.length / speed;
- }
- else
- {
- waitTime = (initNormalize) * _aniState.length / Mathf.Abs(speed);
- }
- SetIEnumeratorActionCallBackByTime(finishedCallBack, waitTime);
- }
- else
- {
- AnimationToolkit.SetAnimationNormalizedToPose(animation, aniName, finishedNormalize);
- finishedCallBack?.Invoke();
- }
- }
- private IEnumerable GetAllAnimationNames()
- {
- List<ValueDropdownItem> item = new List<ValueDropdownItem>();
- if (animation != null)
- {
- foreach (AnimationState state in animation)
- {
- item.Add(new ValueDropdownItem(state.name, state.name));
- }
- }
- return item;
- }
- /// <summary>
- /// 协程等待时间执行委托
- /// </summary>
- /// <param name="callBack"></param>
- /// <param name="time"></param>
- public static void SetIEnumeratorActionCallBackByTime(Action callBack, float time)
- {
- AnimationCoroutine.Instance.StartCoroutine(UnityAcitionCallBackByTime(callBack, time));
- //ChivaTech.ChivaUtils.Singletons.Coroutine.Instance.StartCoroutine(UnityAcitionCallBackByTime(callBack, time));
- }
- static IEnumerator UnityAcitionCallBackByTime(Action callBack, float time)
- {
- yield return new WaitForSeconds(time);
- callBack?.Invoke();
- }
- }
|