unity3d 在Unity C#中更改运行时动画的速度

dly7yett  于 2022-11-16  发布在  C#
关注(0)|答案(3)|浏览(971)

我想在程序运行时将动画的速度更改为我想要的速度。我有一个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);
 }
}

即使changeSpeed的布尔值为true,动画速度也不会更改为1。

fbcarpbf

fbcarpbf1#

若要操纵动画速度,可以使用动画属性中的“速度倍增”参数字段。
如果在动画制作器中选择动画,您将在检查器中看到:

如果你点击“参数”复选框,“倍增”选项将被启用。在“倍增”字段中,你可以选择一个浮点型参数,动画速度将被设置为该参数的值。
因此,您只需创建一个名为speed的新浮点参数,然后通过执行anim.SetFloat("speed", X);脚本将动画速度更改为X

vs91vp4v

vs91vp4v2#

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

在这里我称之为“animSpeed”,并给它一个1.0的值开始。然后选择你想用animSpeed参数改变的动画的状态,在检查器中,在速度下,勾选乘数旁边的参数复选框,并确保驱动速度的参数被选中,我将其设置为animSpeed。

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

[SerializeField] Animator mainAnimator;

此外,您还可以使用一个变量来设置动画速度:

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

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

mainAnimator.SetFloat("animSpeed", animSpeedControl);
ia2d9nvy

ia2d9nvy3#

更改的是Animator对象的速度,而不是当前动画的速度。
对此有两种可能的解决方案:
1.获取当前运行的动画对象并更改其速度。例如:
即:

animation["My animation name"].speed = 1f;

1.在你的动画师内部建立两个动画剪辑(一个运行在0.3f,另一个运行在1f),并根据你的速度值触发它们。然后,你只需要改变速度值,让动画师在两者之间切换:
即:

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

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

相关问题