Godot 2D 形状相交查询结果类 PhysicsIntersectShapeResult2D 详解与实战
文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载本文围绕 Godot 引擎 2D 物理体系中的PhysicsIntersectShapeResult2D结果类展开讲解它如何承接PhysicsDirectSpaceState2D.intersect_shape_into()产生的形状相交数据并通过max_intersections与五个取值方法完成多命中对象的读取。读完本文你将掌握形状区域查询 结果对象复用这一零分配、可限制命中数量的物理查询模式并能在 GDScript 与 C# 中独立写出完整的形状探测代码。类概览形状相交查询的结果容器PhysicsIntersectShapeResult2D是 Godot 2D 物理查询体系中专门用于承载形状与空间中其他形状相交结果的对象。它的官方定位是Stores the results of a shape intersection query即存储一次形状相交查询的结果其类参考文档位于 classes/class_physicsintersectshaperesult2d.rst。它的继承关系为PhysicsIntersectShapeResult2D RefCounted Object继承自RefCounted意味着该对象由引用计数管理当不再有任何引用指向它时会被自动释放因此不需要手动free()。它的直接上游是 PhysicsDirectSpaceState2D该结果对象本身不能独立产生数据而是由PhysicsDirectSpaceState2D.intersect_shape_into()在查询成功后把相交信息写入其中。这一查询方法 结果对象的配对模式在 Godot 4 中是一套贯穿 2D/3D 物理查询的统一设计。该结果对象可以同时存放多个相交命中multiple intersections具体容量由用户通过max_intersections属性控制默认上限为 32。核心属性max_intersections 控制命中容量PhysicsIntersectShapeResult2D只有一个属性属性类型默认值说明max_intersectionsint32该结果对象最多可以存储的相交数量上限属性描述原文为The maximum number of intersections this result object can store。它通过set_max_intersections(value)与get_max_intersections()两个访问器读写。从 PhysicsDirectSpaceState2D.intersect_shape_into() 的方法说明可以确认其用途查询命中后相交数据被写入结果对象而相交数量可以通过max_intersections来限制以减少处理时间The number of intersections can be limited usingmax_intersections, to reduce the processing time。实践要点默认 32 足够覆盖绝大多数场景如技能范围探测、AI 感知圈通常无需修改当查询区域可能同时命中大量对象、而你只关心前几个结果时把max_intersections调小可以显著减少物理引擎的整理与存储开销由于该对象通常复用见下文复用结果对象建议在初始化阶段就设置好容量避免在热循环中反复调整。五个取值方法逐条读取命中信息结果对象通过以下 5 个方法按索引intersection_index访问每一次命中。索引从 0 开始有效范围是0到get_intersection_count() - 1。方法签名返回类型含义get_collider(intersection_index)Object发生碰撞的对象碰撞体节点实例get_collider_id(intersection_index)int碰撞对象的 ObjectIDget_collider_rid(intersection_index)RID相交对象的 RID服务器层标识get_collider_shape(intersection_index)int被碰撞形状在其所属对象上的形状索引shape indexget_intersection_count()int与查询形状相交的形状总数其中get_intersection_count()是整个结果对象的总数入口其余四个方法都需要传入intersection_index定位到具体某一次命中。四个取值方法返回的信息维度各不相同在实际开发中通常组合使用get_collider()返回的是场景节点层对象适合直接做类型判断is Area2D、is CharacterBody2D等、访问其脚本或属性、调用其方法get_collider_id()返回对象的唯一 ID适合做去重、缓存或跨帧追踪即使对象后来被释放也能通过 ID 判断是否见过get_collider_rid()返回物理服务器层面的 RID是对象在PhysicsServer2D中的身份标识适合与服务器 API 交互或在exclude列表中使用get_collider_shape()返回碰撞形状索引当同一对象挂着多个CollisionShape2D时用它区分到底是哪个子形状被命中。与intersect_shape()返回字典数组不同这四个方法都是const方法文档中以const标注表示不修改实例状态、无副作用因此可以在任意时间重复读取无需担心查询结果被破坏。完整实战从查询参数到结果遍历第一步获取 2D 空间状态PhysicsIntersectShapeResult2D依赖PhysicsDirectSpaceState2D产生数据。后者不能直接实例化需要通过World2D.direct_space_state获取见 PhysicsDirectSpaceState2D 文档说明。官方 ray-casting 教程 强调物理空间只在_physics_process()回调期间可以安全访问在其它时机访问可能因空间被锁定而报错。extends Node2D func _physics_process(_delta): var space_state : get_world_2d().direct_space_state # 在 _physics_process 内执行查询…using Godot; public partial class MyNode2D : Node2D { public override void _PhysicsProcess(double delta) { var spaceState GetWorld2D().DirectSpaceState; // 在 _PhysicsProcess 内执行查询… } }第二步构建查询参数 PhysicsShapeQueryParameters2Dintersect_shape_into()的第一参数是 PhysicsShapeQueryParameters2D它集中描述了查询形状、位置姿态与过滤规则var params : PhysicsShapeQueryParameters2D.new() params.shape preload(res://query_shape.tres) # 查询用的 Shape2D 资源 params.transform Transform2D(0, global_position) # 形状在全局坐标系中的位置 params.collision_mask 0b0001 # 只查询第 1 层 params.collide_with_areas true # 是否把 Area2D 计入结果默认 false params.collide_with_bodies true # 是否把 PhysicsBody2D 计入结果默认 true params.exclude [self] # 排除自身避免自命中各过滤属性默认值如下均可在 PhysicsShapeQueryParameters2D 文档中核实collide_with_areas false、collide_with_bodies true、collision_mask 4294967295即检测所有碰撞层、exclude []、margin 0.0、motion Vector2(0, 0)、transform为单位矩阵。注意exclude数组的语义它存放的是对象 RID 列表可以用CollisionObject2D.get_rid()获取某个 2D 碰撞对象的 RID见 CollisionObject2D 文档。官方文档还特别提示该数组返回的是副本修改后需要重新赋值回属性才生效。第三步复用结果对象并执行查询intersect_shape_into()的签名是bool intersect_shape_into(parameters: PhysicsShapeQueryParameters2D, result: PhysicsIntersectShapeResult2D)。与返回新分配的字典数组的intersect_shape()不同它把数据写入调用方传入的预分配结果对象从而避免每帧分配新数组——这是into 系列方法intersect_point_into、intersect_ray_into、collide_shape_into、get_rest_info_into、cast_motion_into的共同设计。var result : PhysicsIntersectShapeResult2D.new() result.max_intersections 8 # 本帧最多取前 8 个命中降低处理开销 func _physics_process(_delta): var space_state : get_world_2d().direct_space_state var params : PhysicsShapeQueryParameters2D.new() params.shape my_shape params.transform Transform2D(0, global_position) params.collide_with_bodies true if space_state.intersect_shape_into(params, result): for i in result.get_intersection_count(): var collider : result.get_collider(i) var collider_id : result.get_collider_id(i) var rid : result.get_collider_rid(i) var shape_idx : result.get_collider_shape(i) print(命中对象: , collider, ID: , collider_id, RID: , rid, 形状索引: , shape_idx) else: print(本次查询没有任何形状相交)using Godot; public partial class MyNode2D : Node2D { private PhysicsIntersectShapeResult2D _result new() { MaxIntersections 8 }; public override void _PhysicsProcess(double delta) { var spaceState GetWorld2D().DirectSpaceState; var parameters new PhysicsShapeQueryParameters2D { Shape MyShape, Transform new Transform2D(0, GlobalPosition), CollideWithBodies true }; if (spaceState.IntersectShapeInto(parameters, _result)) { for (int i 0; i _result.GetIntersectionCount(); i) { var collider _result.GetCollider(i); var colliderId _result.GetColliderId(i); var rid _result.GetColliderRid(i); var shapeIdx _result.GetColliderShape(i); GD.Print($命中对象: {collider}, ID: {colliderId}, RID: {rid}, 形状索引: {shapeIdx}); } } else { GD.Print(本次查询没有任何形状相交); } } }第四步验证查询是否成功intersect_shape_into()的返回值本身就是查询结果标志若发现一个或多个形状与查询形状相交返回true并把数据写入结果对象若没有任何相交返回false。因此最稳妥的读取习惯是先判断返回值再遍历get_intersection_count()。如果直接忽略返回值在零命中的情况下遍历次数为 0虽然不会崩溃但容易掩盖查询到底有没有执行的问题。与 intersect_shape() 字典版本的对比PhysicsDirectSpaceState2D同时提供intersect_shape()与intersect_shape_into()两个形状查询入口两者结果形态不同均可参考 PhysicsDirectSpaceState2D 文档intersect_shape(parameters, max_results 32)返回Array[Dictionary]每个字典包含collider、collider_id、rid、shape四个字段与结果对象的方法一一对应但每次调用都会分配新数组intersect_shape_into(parameters, result)返回bool把数据写入调用方持有的PhysicsIntersectShapeResult2D。维度intersect_shape()intersect_shape_into() PhysicsIntersectShapeResult2D返回形式字典数组每次分配预分配结果对象可复用命中上限max_results参数max_intersections属性典型场景偶尔查询、代码简洁优先每帧/高频查询、追求低分配失败信号空数组返回false高频物理查询如每帧执行的角色脚下探测、持续性的范围感知建议优先使用intersect_shape_into()加结果对象复用的组合以减少每帧的对象分配与 GC 压力。查询参数细节影响结果的六个开关结果对象本身只负责存储命中哪些对象由PhysicsShapeQueryParameters2D决定。理解以下参数能精确控制PhysicsIntersectShapeResult2D里装入什么shape与shape_ridshape持有Shape2D资源引用文档明确建议优先使用它因为它持有实际引用、避免形状在查询期间被释放shape_rid则用于走 Servers API 的高性能路径可用PhysicsServer2D.circle_shape_create()等创建服务器形状后直接赋值transform查询形状在全局坐标中的Transform2D决定形状的位置与旋转查询使用的是全局坐标而非节点局部坐标collision_mask以位掩码指定要检测的物理层默认4294967295表示全层检测collide_with_areas/collide_with_bodies默认false/true即默认只命中PhysicsBody2D类对象需要把Area2D也纳入结果时必须显式打开collide_with_areasexclude从结果中剔除指定 RID 的对象典型用途是查询发起者自身避免自命中margin形状的碰撞边距默认0.0调大边距会使查询形状在物理上变胖用于容忍微小间隙的探测场景。调用时机为什么必须在 _physics_process 内查询ray-casting 教程 明确指出Godot 物理默认与游戏逻辑同线程运行但也可配置为独立线程因此访问空间状态的安全时机仅限于Node._physics_process()回调从该函数之外访问可能因空间处于锁定状态而报错。这一约束同样适用于使用PhysicsIntersectShapeResult2D的intersect_shape_into()查询。若确需在_input()等时机做形状探测应先把查询意图记录下来延迟到下一个_physics_process()中执行。3D 对应类PhysicsIntersectShapeResult3D2D 与 3D 的物理查询 API 保持对称。3D 空间中的对应结果是 PhysicsIntersectShapeResult3D它拥有完全相同的属性与五个方法max_intersections、get_collider、get_collider_id、get_collider_rid、get_collider_shape、get_intersection_count由 PhysicsDirectSpaceState3D.intersect_shape_into() 填充查询参数则对应为PhysicsShapeQueryParameters3D。换言之理解本文的 2D 结果对象后迁移到 3D 只需替换类名与坐标系类型。一个值得注意的差异PhysicsDirectSpaceState3D.intersect_shape_into()的方法说明中额外注明该方法不考虑motion属性This method does not take into account the motion property of the object。在 2D 的对应方法文档中未见此限制但在依赖motion做扫掠式sweep查询时仍应优先使用专门的cast_motion/cast_motion_into流程。典型应用场景PhysicsIntersectShapeResult2D适合一切用一个形状去探测一片区域内的所有对象的需求技能/武器命中判定在角色面前生成扇形或圆形查询形状一次性取回所有被击中的敌人再按get_collider_id()去重AI 感知以圆形或锥形形状模拟视野/听觉范围每帧把范围内的玩家与友军装入结果对象道具拾取与交互在交互点放置小圆形查询形状检测玩家是否站在可交互物附近地形/平台探测角色脚下放置胶囊或矩形探测形状判断脚下是否有可站立表面配合collide_with_bodies true、exclude [self]群体验证结合max_intersections设定上限只关心范围内是否超过 N 个敌人这类阈值判断提前结束处理。以上场景都能复用同一套模式构建PhysicsShapeQueryParameters2D→ 调用intersect_shape_into()→ 判读返回值 → 遍历get_intersection_count()逐条读取。延伸阅读PhysicsIntersectShapeResult2D 类参考本文主文档属性与方法签名权威出处PhysicsDirectSpaceState2D 类参考查询入口intersect_shape_into()及其姊妹查询方法PhysicsShapeQueryParameters2D 类参考查询参数的全部属性与默认值PhysicsIntersectShapeResult3D 类参考3D 对称实现Ray-casting 教程空间状态获取、_physics_process调用约束与exclude用法CollisionObject2D 类参考get_rid()与碰撞层/掩码相关接口PhysicsDirectSpaceState2DExtension 类参考自定义物理服务器接入时的空间状态扩展点。赞分享文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载相关推荐douyin-downloader 抖音无水印下载完整指南3 步完成首次批量下载douyin downloader 抖音无水印下载完整指南3 步完成首次批量下载 douyin downloader 是一款免费的抖音无水印下载工具粘贴视频文档教程游戏开发Godot Shape2D 详解2D 物理碰撞形状基类、自定义 Solver Bias 与碰撞检测 API 实战Godot Shape2D 详解2D 物理碰撞形状基类、自定义 Solver Bias 与碰撞检测 API 实战 Shape2D 是 Godot 引擎中所有文档教程游戏开发k-skill lotto-results:第三方商标在查询型技能中的合规使用边界与实现佐证k skill lotto results:第三方商标在查询型技能中的合规使用边界与实现佐证 本文围绕 lotto results 技能的商标法律声明 http后端即时通讯API设计上一篇JetBrains IDE 试用期重置终极方案告别30天限制的完整指南下一篇DLSS Swapper深度解析三分钟掌握游戏超采样文件管理技巧创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

数据链路层实战解析:成帧、CRC校验、MAC地址与Wireshark排错

数据链路层实战解析:成帧、CRC校验、MAC地址与Wireshark排错

1. 项目概述:为什么数据链路层是网络工程师绕不开的“地基层”你翻过《计算机网络》教材,一定见过“五层模型”或“七层OSI模型”里那个夹在物理层和网络层之间的“数据链路层”。它不像HTTP协议那样天天出现在浏览器地址栏,也不像TCP那样被面…

2026/10/13 14:36:48 阅读更多 →
在 Knative Serving 上部署 R 语言 Hello World 服务:从 R 脚本到 Serverless 应用的完整实战

在 Knative Serving 上部署 R 语言 Hello World 服务:从 R 脚本到 Serverless 应用的完整实战

文档教程云原生 【免费下载链接】docs User documentation for Knative components. 项目地址: https://gitcode.com/gh_mirrors/docs1/docs 点击查看 免费下载 本指南以 Knative docs 仓库中的社区示例 helloworld-r 为主线,完整演示如何将一个读取环境…

2026/10/13 14:36:48 阅读更多 →
C++实现AVL树:从零构建平衡二叉树

C++实现AVL树:从零构建平衡二叉树

很多朋友写二叉搜索树(BST)的时候都有过这种经历:代码照着教科书一行一行写,插入、查找、删除全都正确,一上强度就拉胯。往里头插10万个随机数还能接受,换成有序数据直接肉眼可见地变慢,查一个数…

2026/10/13 14:36:48 阅读更多 →

最新新闻

fabric.js画布编辑器实战:从zip解包到高效避坑指南

fabric.js画布编辑器实战:从zip解包到高效避坑指南

简介:面向前端开发者的 Fabric.js 源代码压缩包,专注于解决 HTML5 Canvas 原生 API 在图形绘制和交互上较为底层、繁琐的问题。包内含完整的 Fabric.js 库文件,以及配套的 SVG 素材、PNG 图像、测试样例与配置文件,共 307 个文件&…

2026/10/13 15:20:55 阅读更多 →
QT自助点餐系统源码解析:从架构到避坑的完整指南

QT自助点餐系统源码解析:从架构到避坑的完整指南

简介:这是一份基于QT框架开发的自助点餐系统源码,面向餐饮行业应用开发学习者与C/QT进阶开发者,可用于理解触摸屏点餐、菜单浏览、下单与支付等完整业务流程的实现思路。资源包共23个文件,约23KB,以6个cpp源文件、6个h…

2026/10/13 15:20:55 阅读更多 →
DeepSeek论文AI率98%降到8%:四轮实操与学术写作降AIGC检测全流程

DeepSeek论文AI率98%降到8%:四轮实操与学术写作降AIGC检测全流程

你花了大半天时间,用DeepSeek把论文初稿整体过了一遍,逻辑清晰、段落整齐,心里还挺满意。结果顺手丢进查重平台一看,AI率98%,直接红得发黑。我最初遇到这个数字时,第一反应是检测平台坏了,后来拿…

2026/10/13 15:20:55 阅读更多 →
西门子杯流程行业自动化:PID整定与联锁开车程序的实战避坑手册

西门子杯流程行业自动化:PID整定与联锁开车程序的实战避坑手册

简介:面向西门子杯流程行业自动化竞赛参与者及PCS7系统学习者,这份资源收录了完整的流程行业自动化项目程序包。内容围绕西门子PCS7过程控制系统的实际应用展开,涵盖控制程序配置、过程数据库、运行日志、标签索引等多类工程文件,…

2026/10/13 15:20:55 阅读更多 →
51单片机Modbus RTU从机实战:从零实现可被轮询的工业通信

51单片机Modbus RTU从机实战:从零实现可被轮询的工业通信

简介:这份资源面向嵌入式初学者与工业自动化方向的开发者,提供在51单片机上实现Modbus通信协议的完整实例代码,帮助解决串口通信配置、协议解析与主从交互等实际问题。压缩包共21个文件,约57KB,包含2个c源文件与2个h头…

2026/10/13 15:20:55 阅读更多 →
健康管理平台PRD:状态机、字段字典与接口契约实战解析

健康管理平台PRD:状态机、字段字典与接口契约实战解析

简介:这是一份传智健康管理系统的产品需求文档,面向产品经理、需求分析师及系统设计人员。文档围绕数据结构管理展开,详细定义健康评估指标的关键字段——序号、指标名称、参考值、单位、针对性别,并明确用户(病人&…

2026/10/13 15:19:55 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →