手册:Godot 中使用的 GameObject 节点和常用根节点

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

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

ACTION GAME MAKER 中的 GameObject 节点基于 Godot 的 CharacterBody2D,因此共享其大部分核心行为。

除了 CharacterBody2D 之外,Godot 还提供了其他几种身体类型节点:

  • StaticBody2D
  • AnimatableBody2D
  • RigidBody2D

在某些情况下,Area2D 也可以用作根节点。

那么,GameObject(CharacterBody2D)与其他节点之间到底有什么区别呢?
本文将解释这些差异。


“身体”节点与非身体节点的区别

主要区别在于:

“该节点是否可以使用基于 CollisionShape2D 的碰撞系统进行物理碰撞。”

  • 身体节点可以相互碰撞,也可以与瓦片碰撞,从而实现推挤、阻挡或站立等行为。
  • 这些行为仅在将身体节点用作根节点时才能正确工作。

相比之下,Area2D 无法进行物理碰撞,但可以检测到其他对象与其重叠

简单来说:

  • 身体节点 → 具有实际存在的物理对象
  • Area2D → 无物理存在的隐形传感器

各身体节点之间的区别

CharacterBody2D(GameObject)

主要用于玩家和敌人等角色。
它执行伪物理计算,允许其与其他身体对象推挤和碰撞。
由于它持续处理碰撞逻辑,因此计算开销较大


StaticBody2D

用于不会移动的物体,例如地板和墙壁。
它可以被碰撞,但由于不执行伪物理计算,因此无法被推动。
该节点非常轻量


AnimatableBody2D

是 StaticBody2D 的变体,专为可移动但不响应物理的物体设计。
它们无法被其他身体对象推动,但由于可以移动,CharacterBody2D 和 RigidBody2D 可以检测到与它们的碰撞。
适用于移动平台。


RigidBody2D

提供完整的、真实的物理模拟。
通过质量、摩擦力和弹跳等属性,可以创建重物推轻物等真实交互。

然而,当与其它身体节点碰撞时,这些节点被视为“无质量(或无限质量)”,这意味着 RigidBody2D 可能会被单方面推挤。

这比 CharacterBody2D 更耗费性能


非身体节点

Area2D

如前所述,Area2D 无法进行物理碰撞,但可以检测重叠。
例如,Area2D 无法在接触瓦片时自动停止,但可以通过脚本在检测到瓦片时将垂直速度设为零来实现停止。

由于它不执行伪物理计算,因此非常轻量,适用于物品、可破坏块等对象。


对比表

节点 碰撞 相互碰撞 物理 性能
CharacterBody2D(GameObject) 伪物理 中–高
StaticBody2D
AnimatableBody2D 低–中
RigidBody2D 完整物理
Area2D

目前,ACTION GAME MAKER 的视觉脚本系统仅支持基于 CharacterBody2D 的 GameObject 节点。
未来更新计划支持更轻量的节点。