Smoothdamp古怪

时间:2017-12-26 05:47:49

标签: unity3d

public bool m_controller;
public Vector3 m_velocity;
private float m_curSpd;
private flost m_speedSmoothVelocity;

private Start()
{
    m_controller = GetComponent<CharacterController>();
}

private Update()
{
    if(m_controller.isGrounded)
    {
        m_velocity = GroundVelocity();
    }

    m_controller.Move(m_velocity * Time.fixedDeltaTime);
}

private Vector3 GroundVelocity()
{
    if(Input.GetButton("Horizontal"))
    {
        float inputX = Input.GetAxisRaw("Horizontal");
        bool run = Input.GetKey(KeyCode.LeftShift);
        float targetVel = ((run) ? m_runSpeed : m_walkSpeed) * inputX;

        m_curSpd = Mathf.SmoothDamp(m_curSpd, targetVel, ref m_speedSmoothVelocity, 0.06f);
    }

    return new Vector3(m_curSpd, 0, 0);
}

之前我曾问过这个问题,但没有答案,只有downvote ......

问题是:当m_velocity.x让角色走路时,它的表现远非期待。通过查看它工作正常,但是当我按住水平键然后停止按住它时,m_velocity.x不会以正常的减速方式返回到0,而是(它的值)反弹约5秒(如果m_velocity.x在getButton中为20,则它从0.xxx反弹到10.xxx“向上和向下不是单向”)。

此时,我甚至不确定这是否是一个错误,或者我的smoothDamp尝试是错误的。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

如果您没有按下按钮,则应运行的唯一代码是return new Vector3(m_curSpd, 0, 0);

您可能想要做的是设置else语句并将m_curSpd重置为0.