如何在Babylon.js中将重力设置到大球体(行星)的中心?

时间:2016-01-27 00:25:08

标签: babylonjs cannon.js

我在[0,0,0]点的Babylon.js做了一个球体,我希望它像一个拥有它自己引力的行星。

然后我想要一个球体(将成为球员)被吸引到大球体的中心("行星")。

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

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

提前谢谢。

1 个答案:

答案 0 :(得分: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