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 向左行走,我的角色精灵会翻转,他会移动,但不会过渡到跑步动画。我不知道为什么,我会很高兴得到任何帮助 =)。

4

2 回答 2

1

你的问题是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);
}

因为显然无论如何你在这两种情况下都会做 se 。

或者实际上我认为您在按下 时宁愿移动到另一个方向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);
}
于 2020-12-05T11:01:08.047 回答
0

您需要使用新的过渡为左侧的运行添加一个新动画。您可以使用“速度”参数并以相同的方式检查使用速度。如果速度大于 0.1,您将转换到 runRight,并且转换到 runLeft 是速度小于 -0.1。现在你只有右边的跑步动画,所以它有问题。移除角色翻转并使用 2 个动画,或者您可以保持角色翻转,但不要使用“速度”大于 0.1,您应该使用 Bool 并在速度不同于“0”时使其为真。这样即使他向左跑也会进入你的动画

于 2020-12-05T10:46:50.280 回答