Health/Assets/Scripts/UI/Component/GudieAnimationManager.cs

125 lines
3.4 KiB
C#
Raw Normal View History

2023-11-27 05:49:53 +00:00
using System;
using System.Collections;
2023-11-07 13:55:35 +00:00
using System.Collections.Generic;
using UnityEngine;
2023-11-27 18:00:13 +00:00
using UnityEngine.UIElements;
2023-11-07 13:55:35 +00:00
public class GudieAnimationManager : MonoBehaviour
2023-11-27 05:49:53 +00:00
{
2023-11-07 13:55:35 +00:00
private Animator _animator;
2023-11-10 08:12:37 +00:00
private string _currName;
2023-11-27 05:49:53 +00:00
private List<AvatarAction> _actionList = new List<AvatarAction>();
2023-11-27 18:00:13 +00:00
private List<string> _actionNameList = new List<string>();
public float AnimationLength
{
get
{
float length = 0;
AnimationClip[] clips = Animator.runtimeAnimatorController.animationClips;
foreach (AnimationClip clip in clips)
2023-11-27 18:00:13 +00:00
{
if (ActionNameList.Contains(clip.name))
2023-11-27 18:00:13 +00:00
{
length += clip.length;
LogPrint.Log("clip.name:" + clip.name + " clip.length:" + clip.length);
LogPrint.Log("length:" + length);
2023-11-27 18:00:13 +00:00
}
}
return length;
2023-11-27 18:00:13 +00:00
}
}
2023-11-27 05:49:53 +00:00
public Animator Animator
{
get
{
if (_animator == null)
{
_animator = transform.GetComponentInChildren<Animator>();
}
return _animator;
}
}
2023-11-07 13:55:35 +00:00
2023-11-27 18:00:13 +00:00
public List<string> ActionNameList
{
get
{
if (_actionNameList.Count != YogaManager.Instance.LevelData.Actions.Count)
2023-11-27 18:00:13 +00:00
{
_actionNameList.Clear();
foreach (var item in YogaManager.Instance.LevelData.Actions)
2023-11-27 18:00:13 +00:00
{
2023-11-27 18:19:21 +00:00
_actionNameList.Add(item.ToString());
2023-11-27 18:00:13 +00:00
}
}
return _actionNameList;
}
}
2023-11-07 13:55:35 +00:00
private void Awake()
{
_animator = transform.GetComponentInChildren<Animator>();
}
2023-11-27 18:00:13 +00:00
2023-11-07 13:55:35 +00:00
public void Play(string name)
{
2023-11-27 05:49:53 +00:00
Animator.CrossFade(name, 0.5f);
2023-11-10 08:12:37 +00:00
_currName = name;
}
2023-11-27 05:49:53 +00:00
public void PlayCurrentActionList(List<AvatarAction> actionList)
{
_actionList = actionList;
2023-11-27 18:00:13 +00:00
2023-11-27 05:49:53 +00:00
Play(Enum.GetName(typeof(AvatarAction), _actionList[YogaManager.Instance.ActionIndex]));
}
2023-11-10 08:12:37 +00:00
private void Update()
{
2023-11-27 18:19:21 +00:00
if (string.IsNullOrEmpty(_currName) || _actionList.Count == 0)
2023-11-10 08:12:37 +00:00
return;
2023-11-27 18:00:13 +00:00
2023-11-10 08:12:37 +00:00
//当未达到指标且动画播放完毕时,重新播放
if (Animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1.0f && GetCurrentAnimationName().Equals(Enum.GetName(typeof(AvatarAction), _actionList[YogaManager.Instance.ActionIndex])))
2023-11-10 08:12:37 +00:00
{
2023-11-27 05:49:53 +00:00
//如果列表动画index小于列表长度播放下一个动画
YogaManager.Instance.ActionIndex++;
//如果列表动画index大于等于列表长度说明动画播放完毕停止播放
if (YogaManager.Instance.ActionIndex >= YogaManager.Instance.LevelData.Actions.Count)
2023-11-10 08:12:37 +00:00
{
2023-11-27 05:49:53 +00:00
Stop();
return;
2023-11-10 08:12:37 +00:00
}
2023-11-27 05:49:53 +00:00
Play(Enum.GetName(typeof(AvatarAction), _actionList[YogaManager.Instance.ActionIndex]));
2023-11-10 08:12:37 +00:00
}
2023-11-07 13:55:35 +00:00
}
2023-11-27 18:00:13 +00:00
private string GetCurrentAnimationName()
{
if (Animator == null)
{
return string.Empty;
}
var clipInfo = Animator.GetCurrentAnimatorClipInfo(0);
if (clipInfo.Length > 0)
{
var name = clipInfo[0].clip.name;
return name;
}
return string.Empty;
}
2023-11-10 07:17:23 +00:00
public void Stop()
{
2023-11-27 05:49:53 +00:00
Animator.StopPlayback();
2023-11-10 07:17:23 +00:00
}
2023-11-07 13:55:35 +00:00
}