在统一C#中更改运行时动画的速度

ero*_*ero 6 c# animation unity-game-engine

我想在程序运行期间将动画速度更改为所需速度。 我在游戏对象上附加了一个C#脚本和动画控制器。动画的默认统一速度为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);
 }
}
Run Code Online (Sandbox Code Playgroud)

动画的速度并没有得到改变,以1个甚至布尔值changeSpeed真的

Leo*_*Leo 14

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

如果在动画器中选择动画,您将在检查器中看到以下内容:

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

因此,您只需创建一个名为的新的float参数speed,然后通过执行脚本即可通过脚本将动画的速度更改为Xanim.SetFloat("speed", X);


Ste*_*low 6

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

向 Animator 添加参数以控制动画速度

在这里,我称它为“animSpeed”,并在开始时给它一个值 1.0。然后使用 animSpeed 参数选择要更改其动画的状态,并在检查器中的 Speed 下,勾选 Multiplier 旁边的 Parameter 复选框,并确保选择了驱动速度的参数,我将其设置为 animSpeed。

在此处输入图片说明

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

 [SerializeField] Animator mainAnimator;
Run Code Online (Sandbox Code Playgroud)

另外,例如,您可以使用一个变量来设置动画速度:

[SerializeField, Range(0.01f, 2f)] float animSpeedControl = 1f;
Run Code Online (Sandbox Code Playgroud)

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

mainAnimator.SetFloat("animSpeed", animSpeedControl);
Run Code Online (Sandbox Code Playgroud)


man*_*ard -1

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

对此有两种可能的解决方案:

  1. 获取当前正在运行的动画对象并更改其速度。就像是:

IE:

animation["My animation name"].speed = 1f;
Run Code Online (Sandbox Code Playgroud)
  1. 在动画制作器中构建两个动画剪辑(一个以 0.3f 运行,另一个以 1f 运行),并根据您的速度值触发它们。然后,您只需更改速度值即可使 Animator 在其中之一之间切换:

IE:

anim.SetFloat("speed", 1f);
Run Code Online (Sandbox Code Playgroud)

或者

anim.SetFloat("speed", .3f);
Run Code Online (Sandbox Code Playgroud)