我在[0,0,0]点的Babylon.js做了一个球体,我希望它像一个拥有它自己引力的行星。
然后我想要一个球体(将成为球员)被吸引到大球体的中心("行星")。
这是我制作的演示。 http://www.babylonjs-playground.com/#DETZ7#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