123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace ChivaXR
- {
- /// <summary>
- /// 动画执行顺序
- /// </summary>
- public enum AnimationSequence
- {
- synchronization, //同步执行下一步
- waitFinished //等待当前动画完成,执行一下状态
- }
- public enum Animation_State
- {
- initState,
- finishedState
- }
- public interface IAniState
- {
- void InitState(); //初始化状态
- void FinishedState(); //结束状态
- }
- public class AnimationDriver
- {
- /// <summary>
- /// 播放动画组
- /// </summary>
- /// <param name="aniDT_Bases"></param>
- /// <param name="finishedCallBack"></param>
- public static void PlayAniDrivers(AnimationDriverBase[] aniDrivers, Action finishedCallBack = null)
- {
- AnimationCoroutine.Instance.StartCoroutine(PlayAniDriversLinner(aniDrivers, finishedCallBack));
- }
- public static void StopAllAnimation()
- {
- AnimationCoroutine.Instance.StopAllCoroutines();
- }
- /// <summary>
- /// 线性播放动画
- /// </summary>
- /// <param name="aniDrivers"></param>
- /// <param name="finishedCallBack"></param>
- /// <returns></returns>
- private static IEnumerator PlayAniDriversLinner(AnimationDriverBase[] aniDrivers, Action finishedCallBack)
- {
- //等待一帧,防止部分冲突
- yield return new WaitForEndOfFrame();
- for (int i = 0; i < aniDrivers.Length; i++)
- {
- bool finishedCurrentAniDriver = false;
- switch (aniDrivers[i].animationSequence)
- {
- case AnimationSequence.synchronization:
- aniDrivers[i].StartPlay();
- finishedCurrentAniDriver = true;
- break;
- case AnimationSequence.waitFinished:
- aniDrivers[i].StartPlay(() => finishedCurrentAniDriver = true);
- break;
- }
- while (!finishedCurrentAniDriver)
- {
- yield return new WaitForEndOfFrame();
- }
- }
- finishedCallBack?.Invoke();
- }
- /// <summary>
- /// 设置AniDrivers状态组
- /// </summary>
- /// <param name="aniDrivers"></param>
- /// <param name="aniState"></param>
- public static void SetAniDriversState(AnimationDriverBase[] aniDrivers, Animation_State aniState)
- {
- switch (aniState)
- {
- case Animation_State.initState:
- for (int i = aniDrivers.Length - 1; i >= 0; i--)
- {
- aniDrivers[i].InitState();
- }
- break;
- case Animation_State.finishedState:
- for (int i = 0; i < aniDrivers.Length; i++)
- {
- aniDrivers[i].FinishedState();
- }
- break;
- }
- }
- }
- }
|