123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace ChivaXR
- {
- /// <summary>
- /// UnityAnimation 工具
- /// </summary>
- public class AnimationToolkit
- {
- /// <summary>
- /// 设置动画状态(Normalized)
- /// </summary>
- /// <param name="_animation"></param>
- /// <param name="_aniName"></param>
- /// <param name="_normalizedTime"></param>
- /// <param name="_speed"></param>
- public static void SetAnimationNormalizedToPose(Animation _animation, float _normalizedTime)
- {
- AnimationState _aniState = _animation[_animation.clip.name];
- _aniState.enabled = true;
- _aniState.weight = 1;
- _aniState.normalizedTime = _normalizedTime;
- _animation.Sample();
- _aniState.enabled = false;
- }
- /// <summary>
- /// 设置动画状态(Normalized)
- /// </summary>
- /// <param name="_animation"></param>
- /// <param name="_aniName"></param>
- /// <param name="_normalizedTime"></param>
- /// <param name="_speed"></param>
- public static void SetAnimationNormalizedToPose(Animation _animation, string _aniName, float _normalizedTime)
- {
- AnimationState _aniState = _animation[_aniName];
- _aniState.enabled = true;
- _aniState.weight = 1;
- _aniState.normalizedTime = _normalizedTime;
- _animation.Sample();
- _aniState.enabled = false;
- }
- /// <summary>
- /// 设置动画状态(Normalized)并播放
- /// </summary>
- /// <param name="_animation"></param>
- /// <param name="_aniName"></param>
- /// <param name="_normalizedTime"></param>
- /// <param name="_speed"></param>
- public static void SetAnimationNormalizedToPlay(Animation _animation, string _aniName, float _normalizedTime, float _speed = 1, Action finishedCallBack = null)
- {
- AnimationState _aniState = _animation[_aniName];
- _aniState.enabled = true;
- _aniState.speed = _speed;
- _aniState.weight = 1;
- _aniState.normalizedTime = _normalizedTime;
- _animation.Sample();
- _aniState.enabled = false;
- _animation.Play(_aniName);
- if (finishedCallBack != null)
- {
- //协程等待动画播放完毕时长,执行委托
- SetIEnumeratorActionCallBackByTime(finishedCallBack, (1 - _normalizedTime) * _aniState.length / _speed);
- }
- }
- /// <summary>
- /// 获取动画播放时长
- /// </summary>
- /// <param name="_animation"></param>
- /// <param name="_aniName"></param>
- /// <param name="_speed"></param>
- /// <returns></returns>
- public static float GetAnimationPlayTime(Animation _animation, string _aniName, float _speed = 1)
- {
- AnimationState _aniState = _animation[_aniName];
- return _aniState.length / _speed;
- }
- /// <summary>
- /// 播放动画
- /// </summary>
- /// <param name="_animation"></param>
- /// <param name="_aniName"></param>
- /// <param name="speed"></param>
- public static void PlayAnimationByClip(Animation _animation, string _aniName, float speed = 1, Action finishedCallBack = null)
- {
- _animation.clip = _animation[_aniName].clip;
- _animation[_aniName].speed = speed;
- _animation.Play(_aniName);
- if (finishedCallBack != null)
- {
- //协程等待动画播放完毕时长,执行委托
- SetIEnumeratorActionCallBackByTime(finishedCallBack, _animation[_aniName].length / speed);
- }
- }
- /// <summary>
- /// 协程等待时间执行委托
- /// </summary>
- /// <param name="callBack"></param>
- /// <param name="time"></param>
- public static void SetIEnumeratorActionCallBackByTime(Action callBack, float time)
- {
- AnimationCoroutine.Instance.StartCoroutine(UnityAcitionCallBackByTime(callBack, time));
- }
- static IEnumerator UnityAcitionCallBackByTime(Action callBack, float time)
- {
- yield return new WaitForSeconds(time);
- callBack?.Invoke();
- }
- }
- }
|