You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取BoxCollider的实际显示尺寸及size参数显示异常疑问

如何获取BoxCollider的实际显示尺寸及size参数显示异常疑问

老哥你遇到的这个问题我之前也碰过,其实是Unity里BoxCollider的空间概念搞的鬼,我给你拆成两部分讲:

一、为什么Inspector里BoxCollider的size总是显示1,但实际碰撞体看起来很大?

这是因为BoxCollider的size参数是本地空间的数值,它不会直接对应场景里看到的世界空间大小。简单说:

  • 如果你给物体的Transform面板设置了非1的缩放值(比如为了快速拉满屏幕,把scale设成(1920, 1080, 1)),那碰撞体的实际显示大小会是「size数值 × 物体的世界缩放比例」。
  • 哪怕size显示的是(1,1,1),只要缩放够大,碰撞体照样能铺满整个屏幕,但Inspector里的size字段只会显示本地空间的原始数值1。

二、怎么获取碰撞体实际显示的尺寸?

有两种靠谱的方法,根据你的需求选:

方法1:用本地size × 世界缩放比例计算

利用transform.lossyScale(物体最终的世界空间缩放,包含父物体的缩放影响)来计算:

// 获取碰撞体组件
BoxCollider boxCollider = gameObject.GetComponent<BoxCollider>();
// 计算世界空间下的实际尺寸
Vector3 actualWorldSize = boxCollider.size * transform.lossyScale;
// 实际的X轴尺寸
float actualXSize = actualWorldSize.x;

方法2:直接获取碰撞体的包围盒尺寸

Unity的BoxCollider.bounds会直接给出世界空间下碰撞体的包围盒信息,其中bounds.size就是你看到的实际显示尺寸,这个方法最稳妥,尤其适合有复杂父子缩放层级的物体:

BoxCollider boxCollider = gameObject.GetComponent<BoxCollider>();
// 获取碰撞体的世界空间包围盒
Bounds colliderBounds = boxCollider.bounds;
// 实际的世界空间尺寸
Vector3 actualWorldSize = colliderBounds.size;
float actualXSize = actualWorldSize.x;

小提醒

如果你想让Inspector里的size数值和实际显示大小对应,建议先把物体的Transform缩放重置为(1,1,1),再手动调整BoxCollider的size到你需要的大小——这样就不会出现「size显示1但实际超大」的混淆情况啦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 03:09:40