主要为动画播放及片段时长获取:
/*******************************************************************************
* 版本声明:v1.0.0
* 类 名 称:AnimatorController
* 创建日期:10/17/2019 11:44:02 AM
* 作者名称:末零
* 功能描述:动画控制
******************************************************************************/
using System;
using UnityEngine;
namespace LastZero
{
/// <summary>
/// 动画控制
/// </summary>
public static class AnimatorController
{
/// <summary>
/// 播放动画
/// </summary>
/// <param name="animator">animator</param>
/// <param name="aniName">动画名</param>
/// <param name="callback">回调</param>
/// <returns>时长</returns>
public static float Play(this Animator animator, string aniName, Action callback = null)
{
if (!animator.TryGetClip(aniName))
{
Debug.LogError("未找到该动画!");
return 0;
}
float lengh = animator.GetLengthByName(aniName);
if (callback == null)
return lengh;
CoroutinesController.DelayDo(() =>
{
callback?.Invoke();
}, lengh);
return lengh;
}
/// <summary>
/// 获取动画时长
/// </summary>
/// <param name="animator">animator</param>
/// <param name="name">名字</param>
/// <returns>时长</returns>
public static float GetLengthByName(this Animator animator, string name)
{
float length = 0;
AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;
foreach (AnimationClip clip in clips)
{
if (clip.name.Equals(name))
{
length = clip.length;
break;
}
}
return length;
}
/// <summary>
/// Try--获取Clip
/// </summary>
/// <param name="animator">animator</param>
/// <param name="name">名字</param>
/// <returns></returns>
private static bool TryGetClip(this Animator animator, string name)
{
AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;
foreach (AnimationClip clip in clips)
{
if (clip.name.Equals(name))
{
return true;
}
}
return false;
}
}
}