Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长

Posted MarsZ 专注游戏开发

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长相关的知识,希望对你有一定的参考价值。

技术分享图片

Unity3d 4及之前的版本中动画的播放用的animation,可直接获取其播放持续长度。但5.x及以后的版本中都是用animator来播放动画了。

https://docs.unity3d.com/Manual/AnimationOverview.html 

While Mecanim is recommended for use in most situations, Unity has retained its legacy animation system which existed before Unity 4. You may need to use when working with older content created before Unity 4. For information on the Legacy animation system, see this section

关于在animator下如何获取其播放持续时长,很多人用的 GetCurrentAnimatorStateInfo 及 GetNextAnimatorStateInfo 等,但这个都不是最终核实的解决方案。

如下才是通过Animator动画状态机获取任意animation clip的准确播放持续时长的正确的、准确的姿势:

///获取动画状态机animator的动画clip的播放持续时长
///@MarsZ 2017年12月19日20:46:20
///site:www.u3dnotes.com
public static class AnimatorExt 
{
	public static float GetClipLength(this Animator animator,string clip) 
	{
		if(null== animator || string.IsNullOrEmpty(clip) || null== animator.runtimeAnimatorController)
		          return 0;
		RuntimeAnimatorController ac = animator.runtimeAnimatorController;
		AnimationClip[] tAnimationClips =  ac.animationClips;
		if( null == tAnimationClips || tAnimationClips.Length <= 0) return 0;
		AnimationClip  tAnimationClip ;
		for (int tCounter = 0 ,tLen = tAnimationClips.Length; tCounter < tLen ; tCounter ++) 
		{
			tAnimationClip = ac.animationClips[i];
			if(null != tAnimationClip && tAnimationClip.name == clip)
			              return tAnimationClip.Length;
		}
		return 0F;
	}
}

Ref:
1、https://docs.unity3d.com/ScriptReference/Animator.html
2、https://docs.unity3d.com/ScriptReference/RuntimeAnimatorController.html
3、http://www.u3dnotes.com/archives/1131 (原创首发地址,转载请保留)




以上是关于Unity3D中通过Animator动画状态机获取任意animation clip的准确播放持续时长的主要内容,如果未能解决你的问题,请参考以下文章

从 Unity3d 中的 Animator 获取动画状态

unity3d学习笔记-动画(2.控制动画与Animator Controller)

Unity3D之Mecanim动画系统学习笔记:Animator Controller

Unity3d 动画系统

Unity3D之Mecanim动画系统学习笔记:Animation View

unity3d动画animator为啥不动了,不反回呢