Animator 参数不会改变 Unity2D
Animator parameter doesnt change Unity2D
你好
我试图为我的角色添加动画过渡,所以写了一些代码:
void Update()
{
Vector3 characterScale = transform.localScale;
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKeyDown(KeyCode.Space) && Cground == true)
{
rb.AddForce(new Vector2(0f, jumpheight), ForceMode2D.Impulse);
Cground = false;
}
transform.localScale = characterScale;
}
这是我的动画控制器:
问题
我的问题是速度参数仅在按 D 向右走时与动画过渡一起使用。如果我然后按 A 向左走,我的角色精灵翻转,他移动但他不会过渡到运行 动画。我不知道为什么,如果有任何帮助我会很高兴 =)。
您需要为 运行 左侧添加新的动画,并添加新的过渡效果。您可以使用“速度”参数并以相同的方式检查使用速度。如果速度大于 0.1,您将过渡到 运行Right,如果速度小于 -0.1,则过渡到 运行Left。现在右边只有一个 运行 动画,所以它有问题。删除角色翻转并使用 2 个动画,或者您可以保持角色翻转但不是使用“速度”大于 0.1,您应该使用 Bool 并在速度不同于“0”时使其为真。这样就会进入你有的动画即使他是运行左边
您的问题是 else
例!
想想如果你只按A
会发生什么:那你不按D
。
这意味着你做的最后一件事是
else animator.SetFloat("speed", 0);
因此重置您刚刚为 A
压力机更改的速度。
您应该将支票更改为例如
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
// Only do this if none of the move keys is pressed
animator.SetFloat("speed", 0);
}
因为显然无论如何你在这两种情况下都会这样做。
或者实际上我认为您在按 A
时更愿意向另一个方向移动。
那我还是会
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.left * Time.deltaTime * velocity);
}
else if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
animator.SetFloat("speed", 0);
}
你好
我试图为我的角色添加动画过渡,所以写了一些代码:
void Update()
{
Vector3 characterScale = transform.localScale;
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else animator.SetFloat("speed", 0);
if (Input.GetKeyDown(KeyCode.Space) && Cground == true)
{
rb.AddForce(new Vector2(0f, jumpheight), ForceMode2D.Impulse);
Cground = false;
}
transform.localScale = characterScale;
}
这是我的动画控制器:
问题
我的问题是速度参数仅在按 D 向右走时与动画过渡一起使用。如果我然后按 A 向左走,我的角色精灵翻转,他移动但他不会过渡到运行 动画。我不知道为什么,如果有任何帮助我会很高兴 =)。
您需要为 运行 左侧添加新的动画,并添加新的过渡效果。您可以使用“速度”参数并以相同的方式检查使用速度。如果速度大于 0.1,您将过渡到 运行Right,如果速度小于 -0.1,则过渡到 运行Left。现在右边只有一个 运行 动画,所以它有问题。删除角色翻转并使用 2 个动画,或者您可以保持角色翻转但不是使用“速度”大于 0.1,您应该使用 Bool 并在速度不同于“0”时使其为真。这样就会进入你有的动画即使他是运行左边
您的问题是 else
例!
想想如果你只按A
会发生什么:那你不按D
。
这意味着你做的最后一件事是
else animator.SetFloat("speed", 0);
因此重置您刚刚为 A
压力机更改的速度。
您应该将支票更改为例如
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.D))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
// Only do this if none of the move keys is pressed
animator.SetFloat("speed", 0);
}
因为显然无论如何你在这两种情况下都会这样做。
或者实际上我认为您在按 A
时更愿意向另一个方向移动。
那我还是会
if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.left * Time.deltaTime * velocity);
}
else if (Input.GetKey(KeyCode.A))
{
animator.SetFloat("speed", velocity);
characterScale.x = 1;
transform.Translate(Vector2.right * Time.deltaTime * velocity);
}
else
{
animator.SetFloat("speed", 0);
}