【问题标题】:UNITY Animation setFloat not working properlyUNITY Animation setFloat 无法正常工作
【发布时间】:2018-12-26 14:06:35
【问题描述】:

我有一个控制角色移动的屏幕按钮,即向右走、向左走和跳跃。我的 Walk Left 和 Jump 按钮事件与动画正常工作,但右侧按钮只是移动角色而不播放 walk 动画,我使用 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;
    }
}

【问题讨论】:

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


    【解决方案1】:

    因为您的 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);
    

    你会注意到你的问题是相反的,你在这两种情况下都使用了一个布尔值,它必须是假或真,当 LeftPressed 为假时,你仍在将动画的速度更新为 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);
    

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

    【讨论】:

    • 我按照你说的做了,但是右走动画仍然没有播放我做错了什么?
    • 您的问题现在可能与您处理输入的方式或您的 Animator 自身设计的方式有关,以及那里的内容,我们没有足够的信息来帮助您了解问题所在,请记住,如果 LeftPressed 和 RightPressed 都为真,则动画师的速度值设置为 0,如果这是您正在尝试且不希望这样做,则应删除重置速度条件的第二部分
    • 请更新您的问题以添加更多信息或接受作为答案
    【解决方案2】:

    anim.SetFloat("frequencyMultiplier", beatFrequency); 后面的2个值也需要设置例如 anim.SetFloat("frequencyMultiplier", beatFrequency,0.1f,0.1f);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      相关资源
      最近更新 更多