我在 Babylon.js 中的点 [0,0,0] 处制作了一个球体,我希望它像一个具有自身重力的行星。
然后我想要一个球体(即玩家)被吸引到大球体(“行星”)的中心。
这是我制作的演示。 http://www.babylonjs-playground.com/#DETZ7#1
我仍然能想到的唯一解决方案是动态更新重力值,但我不知道在这种情况下这是否是最佳做法。如果你知道更好的方法,请告诉我,我今天开始学习它。
先感谢您。
我在 Babylon.js 中的点 [0,0,0] 处制作了一个球体,我希望它像一个具有自身重力的行星。
然后我想要一个球体(即玩家)被吸引到大球体(“行星”)的中心。
这是我制作的演示。 http://www.babylonjs-playground.com/#DETZ7#1
我仍然能想到的唯一解决方案是动态更新重力值,但我不知道在这种情况下这是否是最佳做法。如果你知道更好的方法,请告诉我,我今天开始学习它。
先感谢您。
您可以在 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