赞
踩
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
这个功能主要是因为 每个动画片段的播放速度不一样,需要获取到速度来计算 播放时长。
/// <summary>
/// 播放动画
/// </summary>
/// <param name="obj_">带有Animator的Obj</param>
/// <param name="animatorName_">动画名称</param>
public virtual void ObjPlayAnimator(Animator obj_, string animatorName_, Action<GameObject> action_)
{
//获取动画组件
var anim = obj_.GetComponent<Animator>();
float speed_ = 1;//默认给1
获取AnimatorController中的所有层级:
//AnimatorController controller = animator.runtimeAnimatorController as AnimatorController;
//AnimatorControllerLayer[] layers = controller.layers;
//遍历每个层级,获取层级中的状态机:
//foreach (AnimatorControllerLayer layer in layers)
//{
// AnimatorStateMachine stateMachine = layer.stateMachine;
// // 这里可以进一步处理状态机中的逻辑
//}
//获取AnimatorController中的0层级
AnimatorController controller = anim.runtimeAnimatorController as AnimatorController;
AnimatorStateMachine stateMachine =controller.layers[0].stateMachine;
//获取层级中的状态机
ChildAnimatorState[] states = stateMachine.states;
//遍历状态机,
for (int i = 0; i < states.Length; i++)
{
if (states[i].state.name== animatorName_)//判断得到你要的动画速度
{
speed_ = states[i].state.speed;
}
}
Debug.LogError("speed_="+ speed_);
//播放
anim.Play(animatorName_, 0, 0);
//计算动画时长
float time_ = GetAnimatorLength(anim, animatorName_) * (1 / speed_);
//播放完成后 返回事件
StartCoroutine(OverAnimation(obj_.gameObject, action_, time_));
}
IEnumerator OverAnimation(GameObject Obj, Action<GameObject> action_, float itme_)
{
yield return new WaitForSeconds(itme_);
action_.Invoke(Obj);
}
代码如下(示例):
/// <summary>
/// 获得animator下某个动画片段的时长方法
/// </summary>
/// <param animator="animator">Animator组件</param>
/// <param name="name">要获得的动画片段名字</param>
/// <returns></returns>
public float GetAnimatorLength(Animator animator, string name)
{
//动画片段时间长度
float length = 0;
AnimationClip[] clips = animator.runtimeAnimatorController.animationClips;
//Debug.Log(clips.Length);
foreach (AnimationClip clip in clips)
{
// Debug.Log(clip.name);
if (clip.name.Equals(name))
{
length = clip.length;
break;
}
}
return length;
}
好记性不如烂笔头
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。