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

标签: unity3danimationparametersanimationcontroller

解决方案


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

推荐阅读