在unity c#中改变运行时动画的速度#

Posted

技术标签:

【中文标题】在unity c#中改变运行时动画的速度#【英文标题】:Change the speed of animation at runtime in unity c# 【发布时间】:2016-09-16 06:20:17 【问题描述】:

我想在程序运行期间将动画速度更改为我想要的速度。 我有一个 c# 脚本和动画控制器连接到游戏对象。 unity中默认动画速度为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。

【问题讨论】:

最后我用上面提到的相同代码解决了我的问题。唯一的变化是动画状态的参数,默认情况下需要为真。以前我的动画参数“show”默认为false。 【参考方案1】:

要控制动画速度,您可以使用动画属性中的 Speed multiplier 参数字段。

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

如果您点击“参数”复选框,将启用乘数选项。在Multiplier字段中,可以选择一个float类型的参数,动画速度将根据参数的值进行设置。

所以,你可以新建一个名为speed的float参数,通过脚本将动画的速度改为X,只需执行anim.SetFloat("speed", X);即可

【讨论】:

【参考方案2】:

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

在这里,我将其命名为“animSpeed”,并以 1.0 开头。 然后使用 animSpeed 参数选择要更改其动画的状态,并在 Inspector 中的 Speed 下,勾选 Multiplier 旁边的 Parameter 复选框,并确保选择了驱动速度的参数,我将其设置为 animSpeed。

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

 [SerializeField] Animator mainAnimator;

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

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

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

mainAnimator.SetFloat("animSpeed", animSpeedControl);

【讨论】:

这是一种方法,但它不能解释为什么anim.speed 不起作用。如果它不控制动画的速度,该属性有什么用? @user2102929 如果你有一个 Animator 组件而不是一个 Animation 组件,那就是这样做的方法。提问者有一个 Animator 组件。属性 animSpeed 确实通过充当乘数来控制动画速度。你试过了吗?【参考方案3】:

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

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

    获取当前正在运行的动画对象并更改其速度。比如:

即:

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

即:

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

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

【讨论】:

感谢您的回复,您的第一个选项对我不起作用。第二个选项是当有很多动画时有点重复的过程。 最后我用上面提到的相同代码解决了我的问题。唯一的变化是动画状态参数默认为真。以前我的动画参数“show”默认为假。

以上是关于在unity c#中改变运行时动画的速度#的主要内容,如果未能解决你的问题,请参考以下文章

改变精灵动画速度(pygame)

运行时unity动画器参数不实时更新

如何在动画 CABasicAnimation 时改变速度

如何在动画CABasicAnimation时改变速度

Unity重置动画帧位置转换状态时控制播放速度

Unity重置动画帧位置转换状态时控制播放速度