我想在程序运行时将动画的速度更改为我想要的速度。我有一个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。
3条答案
按热度按时间fbcarpbf1#
若要操纵动画速度,可以使用动画属性中的“速度倍增”参数字段。
如果在动画制作器中选择动画,您将在检查器中看到:
如果你点击“参数”复选框,“倍增”选项将被启用。在“倍增”字段中,你可以选择一个浮点型参数,动画速度将被设置为该参数的值。
因此,您只需创建一个名为
speed
的新浮点参数,然后通过执行anim.SetFloat("speed", X);
脚本将动画速度更改为Xvs91vp4v2#
使用“Animator”窗口,在选定拥有Animator组件的对象时,首先使用搜索字段旁边的小+号添加参数。
在这里我称之为“animSpeed”,并给它一个1.0的值开始。然后选择你想用animSpeed参数改变的动画的状态,在检查器中,在速度下,勾选乘数旁边的参数复选框,并确保驱动速度的参数被选中,我将其设置为animSpeed。
在代码方面,你将有一个脚本,其中包含一个对Animator类型的引用。
此外,您还可以使用一个变量来设置动画速度:
在后面的代码中(可能是在Update中),您最终可以使用Animator的名称设置其参数(但还有其他方法重载可用):
ia2d9nvy3#
更改的是Animator对象的速度,而不是当前动画的速度。
对此有两种可能的解决方案:
1.获取当前运行的动画对象并更改其速度。例如:
即:
1.在你的动画师内部建立两个动画剪辑(一个运行在0.3f,另一个运行在1f),并根据你的速度值触发它们。然后,你只需要改变速度值,让动画师在两者之间切换:
即:
或