【发布时间】:2021-01-12 20:36:41
【问题描述】:
我想出了一个简单的益智游戏,玩家可以控制基本的物理定律和公式。但是,要实现这一点,我需要以某种方式覆盖 GODOT 的物理。我可以自己弄清楚如何为此制作玩家界面,但我首先需要看看我是否真的可以改变物理。例如:是否可以改变
acceleration = Force/mass
到
acceleration = Force * mass
?
【问题讨论】:
标签: game-physics godot
我想出了一个简单的益智游戏,玩家可以控制基本的物理定律和公式。但是,要实现这一点,我需要以某种方式覆盖 GODOT 的物理。我可以自己弄清楚如何为此制作玩家界面,但我首先需要看看我是否真的可以改变物理。例如:是否可以改变
acceleration = Force/mass
到
acceleration = Force * mass
?
【问题讨论】:
标签: game-physics godot
有两种方法。您可以从KinematicBody 构建或自定义RigidBody。
使用KinematicBody,您可以随心所欲地编写运动。只需将其写入_physics_process。您可以使用move_and_collide 处理碰撞,它返回一个KinematicCollision 对象,您可以在其中获取碰撞信息,从而允许您编写自己的碰撞解决方案。
使用RigidBody,我建议将custom_integrator 设置为true 并覆盖在物理过程中调用的_integrate_forces,使用PhysicsDirectBodyState 允许您读取和写入物理对象的状态。
无论采用哪种方法,对于您想要的修改,您都必须自己跟踪加速度并设置速度。 RigidBody 可以为您跟踪力量,或者您可以自己做。无论如何,您都将编写物理集成步骤。
知道不同的物理节点(包括连接/约束)都在幕后使用PhysicsServer api。如果你愿意,你可以直接调用它(这可能是为了优化你的代码,或者做一些节点不提供开箱即用的东西)。
理论上,可以为 Godot 提供您自己的物理引擎(因为它目前附带两个供您选择)。我还没有看到有关如何做到这一点的文档。我只确定您将从源代码构建(这并不难)。
我还想提一下,Godot 物理学正在对 Godot 4.0 进行重写(它可能不会再发布两个了)。 Godot 4.1 预计会有一个新的 API 为 PhysicsServer 提供后端(因此插入你自己的物理引擎将不再是一门黑暗的艺术,我们可以期待第三方物理引擎在某个时候成为一件事) .
附录:实际上还有另一种方法。使用 Godex,并使用它的实体-组件-系统架构编写您的物理。
【讨论】: