zoukankan      html  css  js  c++  java
  • Unity的动画重新播放/暂停/继续播放(Animation/Animator)解决动画像播电影一样上一步下一步的播放问题

    一. 重新播放

    Animator.Play(state, layer, normalizedTime)

    normalizedTime值得范围是0-1,当normalizedTime为0时就可以做到重播的效果

    通过设置normalizedTime的值可以做到让动画从某一个位置播放(解决动画上一步下一步的播放问题)

    layer是从0开始的
    比如有一个叫“hit”的动画,在layer 0层中

    animator.Play("hit", 0, 0f);

    二. 暂停和继续播放

    1. Animotor

    // 播放
    animator.Play("ani_name");
    //animator.SetBool(isPlay,true)//切换动画状态机,的方式播放动画
    // 暂停 animator.speed = 0; // 继续播放 animator.speed = 1;

    2. Animation

    // 播放
    animition.Play("ani_name");
    // 暂停
    animition["ani_name"].speed = 0;
    // 继续播放
    animition["ani_name"].speed = 1;

     三、从动画某一帧开始播放

    
    

    //当前动画机播放时长
    currentTime = anim.GetCurrentAnimatorStateInfo(0).normalizedTime;
    //动画片段长度
    float length = anim.GetCurrentAnimatorClipInfo(0)[0].clip.length;
    //获取动画片段帧频
    float frameRate = anim.GetCurrentAnimatorClipInfo(0)[0].clip.frameRate;
    //计算动画片段总帧数
    float totalFrame = length / (1 / frameRate);
    //计算当前播放的动画片段运行至哪一帧
    int currentFrame = (int)(Mathf.Floor(totalFrame * clipTime) % totalFrame);(
    clipTime改为currentTime
    ) Debug.Log(" Frame: " + currentFrame + “/” + totalFrame);



    ///
    从某一帧开始播放动画 public void OnPlayAnimatorFromFrame(string stateName,float frame) { anim.Play(stateName,0,frame); playSpeed=1; } void OnClick() {   if(!animInfo.IsName("idel"))   {     var frame=frameTemp/TotleFrame;//frameTemp为当前位置的帧值,在配置表中获取;TotleFrame为当前动画总帧数    if(frame>=0&&frame<1)   {      OnPlayAnimatorFromFrame(anim.GetCurrentAnimatorClipInfo(0)[0].clip.name,frame);   }   } }

    四、进度条控制动画 播放

    public Slider AnimatorSlider;
    
    void Start()
    {
         AnimatorSlider.onValueChanged.AddListener(OnSliderController);  
    }
    void OnSliderController(float value)
    {
        if(anim!=null&&!animInfo.IsName("idel")) 
      {
        OnAnimatorPlay(anim.GetCurrentAnimatorClipInfo(
    0)[0].clip.name,value);
      }
    }
    public void OnAnimatorPlay(string stateName,float frame)
    {
     
      anim.Play(stateName,
    0,frame);   
    }
  • 相关阅读:
    Linux文件系统的设计
    HTML中Select的使用具体解释
    【大话设计模式】—— 工厂方法模式
    C++ Primer 学习笔记_84_模板与泛型编程 --模板特化
    Arcgis API for Android之GPS定位
    “大型票务系统”中对机器恶意訪问的处理——验证码
    hdu 4611
    Java实现 蓝桥杯VIP 算法训练 ALGO-85进制转换
    Java实现 蓝桥杯VIP 算法训练 摆动序列
    Java实现 蓝桥杯VIP 算法训练 摆动序列
  • 原文地址:https://www.cnblogs.com/WalkingSnail/p/15666462.html
Copyright © 2011-2022 走看看