在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#中改变运行时动画的速度#的主要内容,如果未能解决你的问题,请参考以下文章