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 节点。
未来更新计划支持更轻量的节点。