ero*_*ero 6 c# animation unity-game-engine
我想在程序运行期间将动画速度更改为所需速度。 我在游戏对象上附加了一个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);
}
}
Run Code Online (Sandbox Code Playgroud)
动画的速度并没有得到改变,以1个甚至布尔值changeSpeed是真的。
Leo*_*Leo 14
要控制动画速度,可以使用动画属性中的“速度倍增器”参数字段。
如果在动画器中选择动画,您将在检查器中看到以下内容:

如果单击“参数”复选框,则将启用“乘数”选项。在“乘数”字段中,可以选择一个浮点类型参数,动画速度将设置为该参数的值。
因此,您只需创建一个名为的新的float参数speed,然后通过执行脚本即可通过脚本将动画的速度更改为Xanim.SetFloat("speed", X);
使用 Animator 窗口,在选择拥有 Animator 组件的对象时,首先使用搜索字段旁边的小 + 号添加一个参数。
在这里,我称它为“animSpeed”,并在开始时给它一个值 1.0。然后使用 animSpeed 参数选择要更改其动画的状态,并在检查器中的 Speed 下,勾选 Multiplier 旁边的 Parameter 复选框,并确保选择了驱动速度的参数,我将其设置为 animSpeed。
在代码方面,您将拥有一个包含对 Animator 类型的引用的脚本。在此脚本中,您将有一个 Animator 字段:
[SerializeField] Animator mainAnimator;
Run Code Online (Sandbox Code Playgroud)
另外,例如,您可以使用一个变量来设置动画速度:
[SerializeField, Range(0.01f, 2f)] float animSpeedControl = 1f;
Run Code Online (Sandbox Code Playgroud)
在代码的后面,可能在更新中,您最终可以使用其名称设置 Animator 的参数(但还有其他方法重载可用):
mainAnimator.SetFloat("animSpeed", animSpeedControl);
Run Code Online (Sandbox Code Playgroud)
man*_*ard -1
您正在更改 Animator 对象的速度,而不是当前动画的速度。
对此有两种可能的解决方案:
IE:
animation["My animation name"].speed = 1f;
Run Code Online (Sandbox Code Playgroud)
IE:
anim.SetFloat("speed", 1f);
Run Code Online (Sandbox Code Playgroud)
或者
anim.SetFloat("speed", .3f);
Run Code Online (Sandbox Code Playgroud)