可操作物理对象的解释:虽无法自主移动,但可使用可视化脚本

在尝试各种方法的过程中,我发现虽然无法直接用可视化脚本控制自身,但可以通过脚本实现一个由物理引擎驱动、并利用可视化脚本进行碰撞判定等操作的 GameObject,因此在此分享。

这仅仅是因为我成功实现了它而做的分享,实际应用中可能还需要进一步的验证。

◆ GameObject 本体
go_physics_controller.zip (6.6 KB)

◆文件内容


具体内容仅包含 GOcontroller 及其脚本。
将此对象加载并放置到场景中后,它会弹跳。此外,可视化脚本已设置为此对象在与任何物体接触时消失。

物理行为的设置通过“RigidBody2D”及其子节点“CollisionShape2D”进行。
在 RigidBody2D 的属性中,可以设置质量、物理材质覆盖(摩擦、反弹等),从而改变弹跳方式。

◆GDScript 简要说明
该实现机制是通过强制将 Godot 物理对象“RigidBody2D”的运动反映到其父节点“GameObject”上来实现的。

通常情况下,“子节点的移动”不会影响“父节点”,因此如果仅仅将 RigidBody2D 设为子节点,RigidBody2D 会脱离父节点自行移动。但通过设置此脚本,它们将一起移动。

◆备注

  • 此 GameObject 的层(Layer)为 2,掩码(Mask)为 2,因此如果其他物体需要与其进行碰撞检测,请注意层的设置。
  • 相反,RigidBody2D 的层为 1,掩码为 1。

◆实际应用示例

  • 玩家触碰后会执行某些操作的物理对象
  • 造成 damage 的物理碎屑
    等。(大概可以)

◆进阶应用思路

  • 如果能在脚本中正确使用 add_force,或巧妙使用 AnimatableBody2D,也许可以让玩家推动此对象。
1 个赞