【问题标题】:Godot: how to make RigidBody2D move its child when moving?Godot:如何让 RigidBody2D 在移动时移动它的孩子?
【发布时间】:2020-04-03 01:43:54
【问题描述】:

我的游戏中有一个简单的场景,结构如下:

Spaceship: RigidBody2D (type=Rigid)
  <4 Collision shapes - "walls" around>
  Item1: RigidBody2D (type=Rigid) 
  Item2: RigidBody2D (type=Static)

当我移动父 RigidBody2D(宇宙飞船)时,我希望所有子项目也会移动(即它们不会改变它们的相对坐标)。

但实际上只有 Item2(它是静态的)与父级一起移动,Item1 保持其全局坐标,因此它从父级 RigidBody 中“移出”。

我尝试了 RigidBody 类型和碰撞层/蒙版的不同组合,但没有运气。我也试图在文档中找到一些东西,但是 RigidBody2D 的文档没有描述子物理对象在父对象移动期间如何工作。

有没有办法让子 RigidBody2D 保持在父 RigidBody2D 的“相对”空间中?

【问题讨论】:

    标签: game-physics godot


    【解决方案1】:

    RigidBody 的意义在于它会响应物理模拟而移动。 docs 指定您不应尝试直接控制位置(包括通过父变换):

    还请记住,物理实体会管理自己的变换,该变换会覆盖您设置的变换。因此,任何直接或间接的转换(包括节点或其父节点的缩放)都将仅在编辑器中可见,并在运行时立即重置。

    如果您希望它根据其父级移动,为什么要让它成为 RigidBody

    考虑使用KinematicBody,或将RigidBody 设置为kinematic mode

    您还可以使用Joints 来描述两个RigidBodies 如何相互影响,尽管根据您的评论,这听起来仍然不是您所需要的。

    【讨论】:

    • 因为我希望他们在一个孤立的“房间”内相互交互,并在屏幕上移动该“房间”及其所有内容。我知道刚体的位置不应直接修改,我只是期望子体可能会以某种方式“继承”施加于父体的力/脉冲。
    • 我明白了,所以您希望在更大的场景中进行隔离模拟。您可以将其添加到您的问题中,以便其他人可以提供更好的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多