在运行中以单位c#更改动画的速度

时间:2016-09-16 06:20:17

标签: c# animation unity3d

我想在程序运行期间将动画的速度更改为我想要的速度。 我有一个c#脚本和animator控制器附加到游戏对象。统一动画的默认速度为 1 。我将动画的默认速度值设置为 0.3f 。在程序运行期间,我希望动画的速度为 1

using UnityEngine;
using System.Collections;
public class wowBoard : MonoBehaviour {
    [SerializeField]
    Animator anim;
    bool changeSpeed;
   void Start()
   {
      anim=GetComponent<Animator>();
     playAnim();
     changeSpeed=false;
    }

   public void playAnim()
   {
     anim.SetBool("show",true);
   }

   void Update()
  {
     if(changeSpeed)
        playChangeSpeedAnim();

   }

 public void playChangeSpeedAnim()
 {
    anim.speed=1;
    anim.SetBool("show",true);
 }
}

动画的速度没有变为1,甚至 changeSpeed 的布尔值 true

3 个答案:

答案 0 :(得分:10)

要操纵动画速度,您可以使用动画属性中的“速度倍增器”参数字段。

如果您在动画师中选择动画,您将在检查器中看到:

如果单击“参数”复选框,将启用“倍增”选项。在“乘数”字段中,您可以选择浮点类型参数,动画速度将设置为参数的值。

所以,你可以创建一个名为speed的新浮点参数,只需执行anim.SetFloat("speed", X);

就可以通过脚本将动画的速度更改为X.

答案 1 :(得分:0)

您正在更改Animator对象的速度,而不是当前动画。

有两种可能的解决方案:

  1. 获取当前正在运行的动画对象并更改其速度。类似的东西:
  2. 即:

    animation["My animation name"].speed = 1f;
    
    1. 在动画制作工具中构建两个动画片段(一个以.3f运行,另一个以1f运行),并根据您的速度值触发它们。然后,您只需要更改速度值以使Animator在一个或另一个之间切换:
    2. 即:

      anim.SetFloat("speed", 1f);
      

      anim.SetFloat("speed", .3f);
      

答案 2 :(得分:0)

在选择拥有Animator组件的对象时,使用Animator窗口,首先使用搜索字段旁边的小号+来添加参数。

Adding a Parameter To Animator To Control Animation Speeds

在这里,我将其称为“ animSpeed”,并以1.0开头。 然后使用animSpeed参数选择要更改其动画的状态,并在检查器中的“速度”下,选中“乘数”旁边的“参数”复选框,并确保已选择驱动速度的参数,我将其设置为animSpeed。

enter image description here

在代码方面,您将拥有一个脚本,其中包含对Animator类型的引用:

 [SerializeField] Animator mainAnimator;

此外,例如,您将具有一个变量来设置动画速度:

[SerializeField, Range(0.01f, 2f)] float timeMultiplier = 1f;

稍后在代码中(可能在Update中),您最终可以使用其名称设置Animator的参数(但还有其他方法重载可用):

mainAnimator.SetFloat("animSpeed", timeMultiplier * 10f);