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尝试是错误的。我在这里做错了什么?
答案 0 :(得分:1)
如果您没有按下按钮,则应运行的唯一代码是return new Vector3(m_curSpd, 0, 0);
您可能想要做的是设置else
语句并将m_curSpd
重置为0.