用途
该技能为 Godot 引擎中的物理查询提供专家级实践指南与配套脚本,主要解决射线检测、形状投射以及直接空间状态查询三类问题。它面向需要实现抛射物、视线判定(LOS)、地形着地、AI 传感器、鼠标拾取等功能的开发场景。
主要能力
资料列出了多个可按需加载的 GDScript 脚本,覆盖以下能力:
- 使用
PhysicsDirectSpaceState2D/3D进行高频intersect_ray,绕过节点开销(direct_space_state_raycast.gd)。 - 使用基于体积的
ShapeCast进行可靠的地面/着地检测,替代薄射线(shapecast_ground_detection.gd)。 - 实现穿透式抛射物,在单条线上检测并返回多个命中(multiple_hit_piercing_ray.gd)。
- 使用扇形射线实现视野锥(FOV)内的 AI 传感器逻辑(field_of_view_scanner.gd)。
- 使用碰撞法线反射计算激光或子弹的反弹(raycast_reflection_logic.gd)。
- 在单点检查重叠物理体,用于爆炸中心等场景(point_in_shape_query.gd)。
- 使用
get_rest_info检测卡住对象并立即解决重叠(rest_info_3d_stuck_fix.gd)。 - 将 2D 屏幕坐标转换为 3D 世界射线,用于点击交互(mouse_pick_3d_query.gd)。
- 通过自高向低射线查找水面高度,用于浮力系统(water_buoyancy_surface_calc.gd)。
- 通过从相交检查中排除特定 RID 来优化性能(query_exclusion_optimization.gd)。
使用方式
资料强调按需加载:不要为单个任务加载全部脚本,只打开与决策表匹配的那一行。查询类型决策表按“需求 / 推荐 API / 成本 / 适用时机 / 脚本”给出对照,例如持久传感器优先使用 RayCast2D/3D 节点,Hitscan 或视线使用 intersect_ray,着地或厚墙体积使用 ShapeCast 或 intersect_shape,爆炸点占用使用 intersect_point,卡住或穿透恢复使用 get_rest_info,穿透多段命中使用重复 intersect_ray 加排除 RID,屏幕到世界点击使用相机投影加 intersect_ray。
资料同时给出物理查询的禁止事项,包括:不得在 _physics_process() 之外访问 direct_space_state;不得在薄射线足够时使用 ShapeCast;不得假设结果返回 CollisionObject 节点;不得假设 RayCast 节点即时更新,移动后需调用 force_raycast_update();不得对物理查询使用复杂视觉网格;不得迭代结果寻找首个有效命中,应使用 collision_mask 与 collision_layer 在服务器层过滤;不得忘记排除施法者自身;不得用射线检测小而快速的区域;不得在 GDScript 中逐个查询 1000 条以上射线;不得忽略 result.rid。
适用场景
适合需要实现抛射物、视线判定、地形着地、AI 传感器、鼠标拾取、爆炸中心检测、水面浮力高度计算以及穿透式武器等功能的 Godot 项目。
限制
资料未提供该技能的收费、价格、平台要求等信息,相关内容暂未提供。文档中的性能建议与决策表仅在所给资料范围内成立,未提及的功能与效果未在资料中说明。