news 2026/7/10 5:42:30

GeometryUtility 工具类 常用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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. 所有涉及空间坐标的方法都需要保持空间一致性,比如平面是世界空间,待测试的点/包围盒也需要转成世界空间再传入。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 5:42:26

Jetson TX2 vs Jetson Nano vs Jetson Orin Nano:3款边缘AI模组性能与选型对比

Jetson TX2 vs Jetson Nano vs Jetson Orin Nano&#xff1a;边缘AI模组选型实战指南当我们需要为机器人、无人机或工业视觉系统选择一款合适的边缘计算设备时&#xff0c;NVIDIA Jetson系列总是工程师的首选。但在TX2、Nano和Orin Nano这三款定位不同的模组之间&#xff0c;如…

作者头像 李华
网站建设 2026/7/10 5:39:14

OpenClaw安装与调试实战:厘清CLI工具、客户端与模型边界

1. 项目概述&#xff1a;一场被误读的“模型升级”闹剧最近刷到好几条标题带“Codex App GPT-5.4 全部搞定”的短视频和图文&#xff0c;点进去发现核心话术几乎一致&#xff1a;“别再折腾 OpenClaw 安装了&#xff0c;现在用 Codex App 配上 GPT-5.4&#xff0c;三步完成本地…

作者头像 李华
网站建设 2026/7/10 5:37:05

AI新闻发布:乐云SEO助力外贸企业构建海外传播新路径

海外采购商与合作伙伴获取品牌信息的方式正在发生深刻变化。除了传统搜索引擎&#xff0c;AI对话工具、行业信息聚合平台及智能推荐系统逐渐成为重要的信息入口。这一趋势对外贸品牌提出新的课题&#xff1a;如何让公开信息在AI生成的内容推荐中获得合理呈现。在此背景下&#…

作者头像 李华
网站建设 2026/7/10 5:34:26

STM32与TLP2770光耦的高低压隔离设计指南

1. 项目背景与核心需求在工业自动化和电力电子系统中&#xff0c;高压元件&#xff08;如功率MOSFET、IGBT等&#xff09;与低压控制设备&#xff08;如MCU&#xff09;之间的安全隔离与可靠通信是系统设计的关键挑战。STM32F723IE作为一款高性能ARM Cortex-M7微控制器&#xf…

作者头像 李华
网站建设 2026/7/10 5:31:23

IPMI KCS/BT 通道实战:LPC总线上的1字节与64字节传输差异解析

IPMI KCS/BT 通道实战&#xff1a;LPC总线上的1字节与64字节传输差异解析在服务器固件开发领域&#xff0c;BIOS与BMC之间的通信机制是系统稳定性的关键支柱。作为两种主流的LPC总线通信协议&#xff0c;KCS&#xff08;Keyboard Controller Style&#xff09;和BT&#xff08;…

作者头像 李华