123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using ChivaXR;
- using Sirenix.OdinInspector;
- using System;
- using System.Linq;
- public class AniDriver_IntervalAnimation : AnimationDriverBase
- {
- [SerializeField]
- private Animation m_Animation;
- [ValueDropdown("GetAllAnimationNames")]
- [SerializeField]
- private string m_AniName;
- [LabelWidth(50)]
- [LabelText("起始帧")]
- [SerializeField]
- private int m_StartFrame;
- [LabelWidth(50)]
- [LabelText("结束帧")]
- [SerializeField]
- private int m_EndFrame;
- [LabelWidth(100)]
- [LabelText("动画帧率")]
- [SerializeField]
- private int m_AniFPS = 30;
- [LabelWidth(100)]
- [LabelText("播放速度")]
- [SerializeField]
- private float m_Speed = 1;
- private AnimationState m_AniState;
- /// <summary>
- /// 当前帧数
- /// </summary>
- private int m_CurrentFrame = 0;
- public override void FinishedState()
- {
-
- }
- public override void InitState()
- {
- if (m_Animation == null || string.IsNullOrEmpty(m_AniName))
- {
- return;
- }
- m_AniState = m_Animation[m_AniName];
- }
- public override void StartPlay(Action finishedCallBack = null)
- {
- StartAniCoroutine(PlayAnimation(finishedCallBack));
- }
- /// <summary>
- /// 获取动画名称信息
- /// </summary>
- /// <returns></returns>
- private IEnumerable GetAllAnimationNames()
- {
- return AnimationManager.Instance.animationDatas.Select(value => new ValueDropdownItem(value.AniDataName, value.AniDataName));
- }
- private IEnumerator PlayAnimation(Action finishedCallBack)
- {
- yield return new WaitForSeconds(m_StartFrame / m_AniFPS);
- while (m_CurrentFrame < m_EndFrame)
- {
- ChangeAniDataProcess(m_CurrentFrame / m_AniFPS);
- m_CurrentFrame++;
- }
- finishedCallBack?.Invoke();
- }
- /// <summary>
- /// 改变动画进度
- /// </summary>
- /// <param name="_value"></param>
- private void ChangeAniDataProcess(float _value)
- {
- if (m_Animation == null || m_AniState == null)
- {
- return;
- }
- m_AniState.enabled = true;
- m_AniState.speed = 0;
- m_AniState.weight = 1;
- m_AniState.normalizedTime = _value;
- m_Animation.Sample();
- m_AniState.enabled = false;
- }
- }
|