UNITY动画setFloat无法正常工作

时间:2018-12-26 14:06:35

标签: c# visual-studio unity3d game-development

我有一个屏幕上的按钮,用于控制角色的移动,向右行走,向左行走和跳转。我的“向左步行”和“跳转”按钮事件在动画中正常运行,但是向右按钮只是在移动角色而不播放步行动画,我使用setFloat来检测角色的运动,请帮助我确定为什么向右步行动画不起作用玩。

  

我的运动控件脚本:

void Movement()
{

    if (RightPressed)
    {
        target.Translate(Vector2.right * 3f * Time.deltaTime);
        target.eulerAngles = new Vector2(0, 0);
    }

    if (LeftPressed)
    {
        target.Translate(-Vector2.right * 3f * Time.deltaTime);
        target.eulerAngles = new Vector2(0, 0);
    }

    if (SpacePressed && isJumping == true)
    {

        if (jumpTimeCounter > 0)
        {
            rb.velocity = Vector2.up * jumpForce;
            rb.freezeRotation = true;
            jumpTimeCounter -= Time.deltaTime;
            anim.SetBool("IsJumping", true);
        }
        else
        {
            isJumping = false;
        }
    }
}
  

我的更新功能:

void Update () {

    Movement();
    {

        if (RightPressed)
            anim.SetFloat("speed", 0.1f);
        else
            anim.SetFloat("speed", 0.0f);


        if (LeftPressed)
            anim.SetFloat("speed", -0.1f);
        else
            anim.SetFloat("speed", 0.0f);

        isGrounded = Physics2D.OverlapCircle(feetPos.position, checkRadius, whatIsGround);

    } 

}
  

我在屏幕上按钮的功能

public void OnScreenButtonChange(string dir)
{
    switch (dir)
    {
        case "A":
            LeftPressed = !LeftPressed;
            break;
        case "D":
            RightPressed = !RightPressed;
            break;
        case "Space":
            SpacePressed = !SpacePressed;
            break;
    }
}

1 个答案:

答案 0 :(得分:2)

因为您的RightPressed代码块被LeftPressed代码块覆盖,

基本上,如果您愿意像这样

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);
    else
        anim.SetFloat("speed", 0.0f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);
    else
        anim.SetFloat("speed", 0.0f);

您会注意到问题已经逆转,在两种情况下都使用必须为false或true的布尔值,并且当LeftPressed为false时,您仍将动画速度更新为0.0f,覆盖RightPressed中设置的内容,您要做的就是更改组织代码的方式

    if (LeftPressed)
        anim.SetFloat("speed", -0.1f);

    if (RightPressed)
        anim.SetFloat("speed", 0.1f);

    if ((!LeftPressed && !RightPressed) || (LeftPressed && RightPressed))
        anim.SetFloat("speed", 0.0f);

这将更好地工作,但不是一个很好的方法,您应该将动画与刚体/变换的实际速度同步,以确保对象的运动与动画之间没有不同步