手册:视野/视界(SightRange)的使用方法

概要

视野/视界(SightRange) 是用于实现“当目标进入视野后就会发动攻击的敌人”等行为的系统。
你也可以设置类似“无法发现躲在墙后面的目标”这样的规则。

该系统通过组合以下两项来使用:

  • 用于设置对象视野/视界的 “SightRange” 节点
  • 用于判断是否进入视野的执行条件 “发现其他对象(TargetSighted)”

技术性概要

SightRange 节点的原点出发,会根据多边形形状进行射线检测(RayCast)。
通过判断射线检测是否与目标对象的 [CollisionShape2D] 发生接触来进行发现判定。


关于 SightRange 节点

SightRange 由两个节点共同工作:

  • 用于进行视野检测与细节设置的 SightRange 节点
  • 用于设置视野形状的 CollisionPolygon2D 节点

SightRange 节点的设置项目

  • 视野形状
    可以从预设形状(圆形、矩形、胶囊形)中选择视野形状。
    点击“创建”按钮后,会覆盖子节点 CollisionPolygon2D 的形状。
  • 迭代频率(iteration)
    指定进行视野判定(射线检测)的频率。
    通常默认值 5 就足够了。
    设置更高的值可以进行更精密的计算;设置更低的值可以降低负载。
  • 忽略墙体(detect_behind_cover)
    允许忽略其他对象的墙体碰撞判定。
    你可以通过下面的“障碍物层”进行更细致的设置。
  • 根据朝向旋转(follow_direction)
    使视野根据对象的显示方向自动旋转。
  • 障碍物层(obstacle_layer)
    指定“遮挡视野的碰撞层”。
    该设置会受各对象的 CollisionShape2D 或瓦片(Tile)的碰撞层配置影响。

SightRange 节点的其他重要属性

  • CollisionObject2D > Collision
    你可以设置视野本身的碰撞层/遮罩。
    就像攻击判定/受击判定一样,可以精确控制哪些对象会被发现、哪些不会被发现。

CollisionPolygon2D

这是 Godot 标准的多边形生成节点。
由于可以自由调整顶点数量和位置,
不仅可以改变视野大小,还能通过自由变形设置扇形视野或更复杂形状的视野。


关于条件“发现其他对象(TargetSighted)”

这是设置在进行发现的一侧对象上的条件。
当特定组或指定对象进入视野时,该条件返回 TRUE 并触发状态切换。

“发现其他对象(TargetSighted)”的设置项目

  • 目标 SightRange
    指定用于判定的 SightRange 节点。
  • 以所有层为对象
    勾选后,无论 SightRange 的设置如何,都会对所有碰撞层进行检测。
  • 目标类型
    可以指定目标为 组(Group)对象(Object)