【发布时间】:2017-11-21 18:25:45
【问题描述】:
我有以下代码,它以随机方向向刚体2d 添加力,并尝试在达到特定速度时将线性拖动设置为 0,基本上让游戏对象慢慢飘走。
问题是drag好像马上就设为0了,不明白为什么,所以无法解决问题
void Update () {
if (Input.GetKeyDown ("space")) {
rb.velocity = Vector3.zero;
Vector3 dir = Random.onUnitSphere;
rb.AddForce (dir * 10, ForceMode2D.Impulse);
}
if (rb.velocity.magnitude <= 1) {
rb.drag = 0;
}
}
谢谢 克鲁兹
【问题讨论】:
-
您在击中空间时将速度设置为 0,这会将幅度设置为 0。您施加的力可能没有将 velocity.magnitude 设置为
<= 1,这会为您提供 rb。 drag = 0。rb.drag设置一次后,您永远不会更改它。 -
谢谢@Maakep。我假设向刚体添加力将确保其速度在新方向上设置为新值,并且幅度值也会随之而来。
-
我没有测试过,但我假设是这样,物理不是在 Update() 中计算的。更新每帧都会运行,所以我猜它在某些帧上没有移动到超过 1 的幅度,这会将所有未来的阻力设置为 0。您可以通过设置 Debug.Log(rb.velocity.magnitude); 轻松检查这一点。在更新方法中。我很想听听结果
-
解决这个问题的一种方法可能就是这样做:
else if (rb.drag != yourMagnitude) { rb.drag = yourMagnitude; }on that if。所以它在低速时漂浮并在高速时减少。
标签: unity3d 2d drag rigid-bodies