概要
视野/视界(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)。