手册:关于 GameObject 节点和 Godot 的各个 Body 节点

GameObject 节点与 Godot 中常用作根节点的节点

在 Godot 中,可以使用多种类型的节点作为游戏对象的根节点。然而,目前 ACTION GAME MAKER 的视觉脚本必须将 GameObject 节点用作根节点

ACTION GAME MAKER 的 GameObject 节点基于 Godot 的 CharacterBody2D,其基本行为也类似。

另一方面,Godot 中还有其他包含“Body”的节点,例如:

  • StaticBody2D
  • AnimatableBody2D
  • RigidBody2D

此外,有时也会使用 Area2D 作为根节点。

那么,GameObject(即 CharacterBody2D)与这些节点之间具体有哪些区别呢?本手册将对此进行说明。


带“Body”名称的节点与不带“Body”名称的节点的区别

最大的区别在于:

“是否能通过 CollisionShape2D 实现碰撞系统中的碰撞?”

  • Body 节点之间,或 Body 节点与瓦片之间可以相互碰撞,产生推挤、碰撞停止或站立在地面等行为。
  • 这些行为仅在 Body 节点作为根节点 时才能正确运行。

另一方面,Area2D 无法与 Body 节点或瓦片发生物理碰撞,但可以检测到碰撞事件

形象地理解:

  • Body 节点 → 具有实体的物体
  • Area2D → 不具有实体的传感器

这样理解会更清晰。


各 Body 节点的区别

CharacterBody2D(GameObject)

主要用于玩家或敌人等“角色”对象。

由于采用伪物理处理,可以实现推挤和推开等行为。但因为需要持续计算碰撞处理,负载相对较高


StaticBody2D

用于地面、墙壁等“静止物体”。

可以发生碰撞,但不进行伪物理处理,因此不会被玩家推挤。负载较低的节点。


AnimatableBody2D

是 StaticBody2D 的变种,用于“可移动但不受物理影响”的对象。

不会被其他 Body 节点推挤,但具有移动能力,因此可以被 CharacterBody2D 检测到碰撞。适用于移动平台等。


RigidBody2D

Godot 中用于实现完整物理处理的节点。

通过设置重量、摩擦、反弹等参数,可实现更真实的物理行为。

但与其他 Body 节点碰撞时,其他 Body 节点会被视为“质量为零(或无限大)”,因此 RigidBody2D 可能单方面被推动。

比 CharacterBody2D 的负载更高。


非 Body 节点

Area2D 节点

无法发生碰撞,但可以“检测”碰撞。

例如,无法实现“与瓦片碰撞后自动停止”的行为,但可以通过检测瓦片并用脚本将速度设为 0 来实现。

由于不进行伪物理处理,轻量,适用于道具、可破坏的方块等。


各节点对比表

节点名称 碰撞处理 相互碰撞 物理处理 处理负载
CharacterBody2D (GameObject) 伪物理 中~高
StaticBody2D 不可
AnimatableBody2D 不可 低~中
RigidBody2D 完全物理
Area2D 不可

目前 ACTION GAME MAKER 仅支持 GameObject(即 CharacterBody2D),但未来将逐步开发支持更轻量的节点。

2 个赞