3

我在 Babylon.js 中的点 [0,0,0] 处制作了一个球体,我希望它像一个具有自身重力的行星。

然后我想要一个球体(即玩家)被吸引到大球体(“行星”)的中心。

这是我制作的演示。 http://www.babylonjs-playground.com/#DETZ7#1

我仍然能想到的唯一解决方案是动态更新重力值,但我不知道在这种情况下这是否是最佳做法。如果你知道更好的方法,请告诉我,我今天开始学习它。

先感谢您。

4

1 回答 1

3

您可以在 Cannon.js 中通过在每个物理滴答上对玩家身体施加一个力来制作“行星重力”力。力应该指向行星的中心。您还需要取消物理世界每一步施加的重力。

这主要是我添加到您的代码中以实现重力的内容。请注意,我还更改了您的makePlayer函数,因此它返回CANNON.Body而不是您的播放器网格。为简单起见,我还确保在 Y 方向上将世界的重力设置为正好 -10。

// Listen for physics ticks
playerBody.world.addEventListener('postStep', function () {

    // Direction towards (0,0,0)
    playerBody.force.set(
        -playerBody.position.x,
        -playerBody.position.y,
        -playerBody.position.z
    ).normalize();

    // Set magnitude to 10
    playerBody.force.scale(10, playerBody.force);

    // Cancel gravity force from the world
    playerBody.force.y += 10;

});

这是更新后的游乐场场景: http ://www.babylonjs-playground.com/#DETZ7#4

于 2016-01-31T18:34:17.813 回答