我想在程序运行期间将动画的速度更改为我想要的速度。 我有一个c#脚本和animator控制器附加到游戏对象。统一动画的默认速度为 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);
}
}
动画的速度没有变为1,甚至 changeSpeed 的布尔值 true 。
答案 0 :(得分:10)
要操纵动画速度,您可以使用动画属性中的“速度倍增器”参数字段。
如果您在动画师中选择动画,您将在检查器中看到:
如果单击“参数”复选框,将启用“倍增”选项。在“乘数”字段中,您可以选择浮点类型参数,动画速度将设置为参数的值。
所以,你可以创建一个名为speed
的新浮点参数,只需执行anim.SetFloat("speed", X);
答案 1 :(得分:0)
您正在更改Animator对象的速度,而不是当前动画。
有两种可能的解决方案:
即:
animation["My animation name"].speed = 1f;
即:
anim.SetFloat("speed", 1f);
或
anim.SetFloat("speed", .3f);
答案 2 :(得分:0)
在选择拥有Animator组件的对象时,使用Animator窗口,首先使用搜索字段旁边的小号+来添加参数。
在这里,我将其称为“ animSpeed”,并以1.0开头。 然后使用animSpeed参数选择要更改其动画的状态,并在检查器中的“速度”下,选中“乘数”旁边的“参数”复选框,并确保已选择驱动速度的参数,我将其设置为animSpeed。
在代码方面,您将拥有一个脚本,其中包含对Animator类型的引用:
[SerializeField] Animator mainAnimator;
此外,例如,您将具有一个变量来设置动画速度:
[SerializeField, Range(0.01f, 2f)] float timeMultiplier = 1f;
稍后在代码中(可能在Update中),您最终可以使用其名称设置Animator的参数(但还有其他方法重载可用):
mainAnimator.SetFloat("animSpeed", timeMultiplier * 10f);