【问题标题】:Smoothdamp weirdnessSmoothdamp 怪异
【发布时间】:2018-01-02 20:38:47
【问题描述】:
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);
}

我之前问过这个问题,但没有答案,只能投反对票……

问题是:当这使角色行走时,m_velocity.x 的行为与预期相去甚远。通过看起来它工作正常,但是当我按住 Horizo​​ntal 键然后停止按住它时,m_velocity.x 不会以正常的减速方式返回 0,而是它(值)反弹大约 5 秒(如果在 getButton 处 m_velocity.x 为 20,那么它会从 0.xxx 反弹到 10.xxx “上下不以一种方式”)。

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

【问题讨论】:

  • 如果你没有按住按钮,唯一应该运行的代码是return new Vector3(m_curSpd, 0, 0);
  • @Draco18s 非常感谢您的评论!我想我可以把它当作是 Vector3.zero 总是返回的 new Vector(m_curSpd, 0, 0) ,对吗?然而,我的这个问题发生在它曾经移动并且输入变为空时发生奇怪的速度反弹。这还是一样吗?
  • 您可能想要做的是设置一个else 语句并将m_curSpd 重置为0。
  • @Draco18s OMG...谢谢...我真的很尴尬,实际上。您应该将其发布为答案!我很乐意选择它!

标签: unity3d


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2012-10-28
    • 2014-09-17
    • 2010-10-12
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多