概述
Area2DGameObject 自 1.2.0 版本起引入,是一种旨在通过省略与物理碰撞相关的功能,从而降低处理负载的游戏对象,相较于传统的 GameObject。
由于它无法执行物理碰撞,因此不适合用于玩家或敌人等角色(穿过墙壁会引发问题),也不适合用作物理障碍物(如可破坏的墙壁)。
然而,通过将不需要物理碰撞的对象替换为 Area2DGameObject,可以提升整体游戏性能并降低处理开销。
技术概述
传统的 GameObject 是继承自 CharacterBody2D 的自定义节点,而 Area2DGameObject 顾名思义,继承自 Area2D。
有关这些节点之间的详细差异,请参考以下手册:
因缺乏物理碰撞导致的限制
由于不支持物理碰撞,以下行为无法实现:
- 无法与其他对象发生碰撞。
- 无法沿地板或墙壁的形状移动,也无法在斜坡上滑动。
- 模板移动动作(如“弹跳移动”和“不从边缘掉落”)将无法生效。
对于不适用于 Area2DGameObject 的属性,系统会显示警告消息以提示限制。
无物理碰撞时仍可实现的功能
- 仍可检测与其他对象的接触,因此基于接触的条件(如检测与墙壁接触)仍可正常工作。
- 仍可受重力影响。
可将其视为一个传感器:它没有实体,但可以检测交互。
通常,除“限制”部分列出的功能外,其他所有功能均可正常工作。
通过使用可视化脚本定义诸如“当接触瓦片时”或“将移动速度设为 0”等行为,可以创建伪碰撞行为。这使得模拟敌人被击败时物品散落等效果成为可能。
但请注意,由于这只是模拟,物体重叠等问题更易发生,请谨慎使用。
如何使用 Area2DGameObject
Area2DGameObject 与现有 GameObject 兼容。您可以通过右键单击 GameObject 节点,选择“更改类型”,然后选择 Area2DGameObject 来进行切换。
同样,您也可以通过相同方式将 Area2DGameObject 切换回 GameObject。