如何获取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
相关产品推荐
相关产品推荐

