概述
Area2DGameObject 是在 1.2.0 版本中引入的一种游戏对象。与传统的 GameObject 相比,它通过省略与物理碰撞相关的功能来降低运行负载。
由于无法进行物理碰撞,它并不适合用于玩家或敌人等角色(这些角色若能穿过墙壁会造成问题),也不适合用于可破坏的墙壁等作为角色障碍物的对象。
但是,将不需要物理碰撞的对象替换为 Area2DGameObject,可以有效减轻游戏整体的处理负担。
技术概述
传统的 GameObject 是一个继承自 CharacterBody2D 节点的自定义节点,而 Area2DGameObject 顾名思义,是继承自 Area2D 节点创建的。
关于各节点之间的详细差异,请参考以下手册:
由于无法进行“物理碰撞”而无法实现的功能
由于不支持物理碰撞,以下行为将无法实现:
- 无法与其他对象发生碰撞。
- 无法沿着地面或墙壁的形状移动,也无法在斜坡上滑动。
- 模板移动动作中的 “反弹移动” 和 “不会从高处掉落” 功能将无法运行。
对于在 Area2DGameObject 中无法生效的属性,系统会显示提示警告。
即使没有“物理碰撞”仍可实现的功能
- 仍然可以检测与其他对象的接触,因此与墙壁判定等接触类条件可以正常工作。
- 仍然可以受到重力的影响。
可以将其理解为一种传感器:没有实体碰撞,但可以进行检测。
基本上,除上述“无法实现的功能”之外,其余功能都可以正常使用。
通过在可视化脚本中设置诸如 “与瓦片接触时”、“将移动速度设为 0” 等行为,可以实现伪碰撞处理。例如,可以模拟敌人被击败后道具四散的效果。
但由于这只是模拟处理,发生对象重叠等问题的可能性会提高,请务必注意。
Area2DGameObject 的使用方法
Area2DGameObject 与现有的 GameObject 具有兼容性。只需右键点击 GameObject 节点,选择 “更改类型”,即可切换为 Area2DGameObject。
同样地,也可以使用相同的方法将 Area2DGameObject 切换回 GameObject。