当前位置: 首页 > news >正文

GeometryUtility 工具类 常用方法

1.CalculateBounds

作用

计算一组顶点变换后对应的最小轴对齐包围盒(AABB),是非常常用的辅助方法。

方法说明

publicstaticBoundsCalculateBounds(Vector3[]positions,Matrix4x4transform);
  • positions:输入的顶点数组,一般是模型本地空间的顶点
  • transform:顶点的变换矩阵(比如把本地顶点转世界空间,就传入物体的transform.localToWorldMatrix,不需要变换传Matrix4x4.identity即可)

示例

// 计算模型在世界空间的包围盒Meshmesh=GetComponent<MeshFilter>().sharedMesh;Matrix4x4localToWorld=transform.localToWorldMatrix;BoundsworldBounds=GeometryUtility.CalculateBounds(mesh.vertices,localToWorld);

2.IntersectRayAABB

作用

快速测试射线和轴对齐包围盒(AABB)是否相交,常用于批量检测的快速剔除。

方法说明

publicstaticboolIntersectRayAABB(Rayray,Boundsbounds,outfloatdistance);
  • 返回值:true表示射线和包围盒相交,false表示不相交
  • distance:out参数,返回射线起点到交点的距离

示例

// 鼠标点击选物体,先通过包围盒快速剔除不相交的物体Rayray=Camera.main.ScreenPointToRay(Input.mousePosition);foreach(varrendinallRenderers){// 先测包围盒相交,仅对相交的物体做后续高精度碰撞检测,节省性能if(GeometryUtility.IntersectRayAABB(ray,rend.bounds,outfloatdist)){HandleClick(rend.gameObject);}}

3.BoundsToPoints

作用

把AABB包围盒转换为它8个角顶点的数组,常用于包围盒可视化、自定义几何检测。

方法说明

publicstaticvoidBoundsToPoints(Boundsbounds,Vector3[]points);
  • 要求传入的points数组长度必须为8,方法会把8个顶点按顺序填充到数组中

示例

// 用Gizmos在Scene窗口绘制物体包围盒Vector3[]corners=newVector3[8];GeometryUtility.BoundsToPoints(rend.bounds,corners);for(inti=0;i<corners.Length;i++){Gizmos.DrawSphere(corners[i],0.1f);}

4.TestPlanesPoint

作用

测试单个点是否在平面组围成的凸空间内部,和TestPlanesAABB对应,适合点级别的可见性/空间判断。

方法说明

publicstaticboolTestPlanesPoint(Plane[]planes,Vector3point);
  • 返回true:点在凸空间内部;返回false:点在空间外部

示例

// 判断某个点(比如敌人的位置)是否在相机可见范围内Plane[]frustum=GeometryUtility.CalculateFrustumPlanes(Camera.main);boolisPointInView=GeometryUtility.TestPlanesPoint(frustum,enemy.position);

5.CreatePlane

作用

程序化快速生成指定大小、分段的平面网格数据,适合快速原型开发、程序化生成平面。

方法说明

// 常用重载,默认生成XZ平面publicstaticMeshCreatePlane(floatwidth,floatheight,intwidthSegments,intheightSegments);// 带轴向参数的重载publicstaticMeshCreatePlane(floatwidth,floatheight,intwidthSegments,intheightSegments,PlaneAxisplaneAxis);
  • planeAxis可选值:XZ/XY/YZ,指定平面所在的坐标系平面

示例

// 一键生成10x10单位、10x10分段的XZ平面MeshplaneMesh=GeometryUtility.CreatePlane(10f,10f,10,10);GetComponent<MeshFilter>().mesh=planeMesh;

6.ProjectPoints

作用

对一组3D点做投影变换,将点从原空间变换到裁剪空间,适合自定义投影、裁剪逻辑开发。

方法说明

publicstaticvoidProjectPoints(Vector3[]points,Matrix4x4projectionMatrix,floatnearClip,floatfarClip,Vector2[]projectedPositions);
  • 传入原3D点和投影矩阵(通常是相机的世界到投影空间矩阵),输出变换后的二维投影坐标。

整体注意事项

  1. 所有方法都是静态无状态,运行时调用性能开销很低,可放心用于帧更新逻辑;
  2. 所有涉及空间坐标的方法都需要保持空间一致性,比如平面是世界空间,待测试的点/包围盒也需要转成世界空间再传入。
http://www.cnnetsun.cn/news/3256447.html

相关文章:

  • Jetson TX2 vs Jetson Nano vs Jetson Orin Nano:3款边缘AI模组性能与选型对比
  • Android MediaSession 与 MediaController 通信原理解析:4个核心类与异步回调机制
  • OpenClaw安装与调试实战:厘清CLI工具、客户端与模型边界
  • AI新闻发布:乐云SEO助力外贸企业构建海外传播新路径
  • STM32与TLP2770光耦的高低压隔离设计指南
  • IPMI KCS/BT 通道实战:LPC总线上的1字节与64字节传输差异解析
  • AI Agent开发实战路线:从Python基础到工程化部署的完整指南
  • 3款主流仿真软件对比:LTspice vs PSpice vs Cadence 模拟IC关键电路性能验证
  • PEG修饰无机纳米颗粒定制:提升纳米材料稳定性与生物应用性能的新策略
  • Oxide 3.0 插件框架安装:Windows/Linux 双系统 5 步配置指南
  • AI天才研究院(AI Genius Institute)博客介绍
  • VS Code插件与AI Agent的信任风险全景解析
  • 动态量化与混合精度推理——延迟与吞吐的最优平衡策略
  • Jetson Orin Nano Super上编译OpenCV 4.10+CUDA全指南
  • 三层堵点困住企业AI落地:孤岛、歧义、知识流失,本体语义一站
  • Ant Design 5.14.1 主题切换实战:3步封装可复用的 ThemeProvider 组件
  • Arch Linux崛起:从极客玩具到开发者利器的深度解析与实践指南
  • 4问MLX90614选型、国产替代品牌怎么选、成本多少
  • 一文读懂:异形铝单板成本控制的5大秘诀
  • DeepSeek Prompt工程实战:从AI幻觉到可控的合理编造
  • 数字锁相放大器(DLIA)Matlab 2023b 仿真:-10dB 噪声下 1000Hz 信号幅相提取
  • 图解人工智能(82)人工智能前沿-太空探索
  • 强化学习为什么长盛不衰?贯穿深度学习、大模型、智能体、具身智能的底层核心驱动力
  • 手机连接电脑的方法 手机连接电脑怎么连接
  • 警惕Claude Code与GPT-5.4等虚构技术概念
  • Claude Code CLI:终端驱动的全栈故障诊断新范式
  • Sentinel 1.8.7 规则持久化到Nacos:解决重启丢失的2种配置方案
  • OpenClaw实战:工业AI Agent框架部署与OPC UA技能开发指南
  • Logisim 2.7.1 构建8位模型机CPU:从ALU到控制器的4个核心模块封装
  • MIPS单周期CPU数据通路搭建:5大核心部件与关键多路选择器设计详解