提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 获取某个动画片段的播放速度,并且得到播放时长
- 1.获取速度
- 2.计算时长
- 总结
前言
这个功能主要是因为 每个动画片段的播放速度不一样,需要获取到速度来计算 播放时长。
获取某个动画片段的播放速度,并且得到播放时长
1.获取速度
/// <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);}
2.计算时长
代码如下(示例):
/// <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;}
总结
好记性不如烂笔头