所以我的问题是球员(球(在从左或右添加力后继续滚动。如何使它在到达点时停止而不继续滚动?
if (Input.GetKey("d"))
{
rb.AddForce(0, 0, -sideWaysForce * Time.deltaTime, ForceMode.VelocityChange);
}
if (Input.GetKey("a"))
{
rb.AddForce(0, 0, sideWaysForce * Time.deltaTime, ForceMode.VelocityChange);
}
现在,在添加力之后,球继续滚动x次(取决于添加到球员的力的大小(
当需要立即停止时,可以将isKinetic设置为true。例如,如果你想让球在球员停止按D键时立即停止,你可以这样做:
if (Input.GetKeyUp(KeyCode.D)) {
rb.isKinematic = true;
}
这样做将有效地从物理计算中删除刚体,因此您需要确保在您想再次将其用作物理对象之前/之后(即,在您尝试对其调用AddForce或在碰撞中使用它之前(设置rb.isKinematic = false
。
有关更多信息,请参阅isKinetic上的Unity文档。
还有其他方法可以做到这一点,例如对刚体的当前速度施加相反的力,或者操纵角阻力或修改表面摩擦。最合适的方法取决于你如何设想";停止";球。
将刚体速度和角速度设置为零
示例
rb.velocity = Vector3.zero;
rb.angularVelocity = Vector3.zero;