当您将 BoxCollider 添加到新项目时,它将自动拉伸以适合该项目。当您更改此项目的网格时,碰撞器不会自动缩回。collider 本身的 api 中没有“AlignToSize”之类的方法。简直有
BoxCollider.size
Use this to return or set the size of the BoxCollider component of a
GameObject. Unity measures the size in the GameObject's local space
但是如果我们写
collider.size = Vector3.one;
然后最后我们得到一个对撞机,不是根据物体的大小,而是简单的边长为 1x1x1
那么如何拉伸 BoxCollider 以适应对象呢?
向对象添加新组件时,它(组件)被称为
MonoBehaviour.Reset():这种行为改变了对撞机的大小和中心。
您还需要了解什么通常会影响对撞机的大小和位置,在原始对撞机的情况下
BoxCollider/SphereCollider,这些只是 2 个值:center对撞机中心的局部位置和size(球体的半径)局部对撞机的大小(半径)。您可以在组件的帮助下获取这些值
MeshFilter,或者更确切地说,借助以下工具MeshFilter.sharedMesh.bounds:重要的是要了解对撞机的大小相对于它们所附着的对象 存储在本地空间中。
MeshFilter.sharedMesh.bounds是本地空间中的 AABB ,这是我们需要调整碰撞器的大小。为了让大家的答案足够清楚,我将解释一下AABB是什么,以防万一。
AABB - 轴对齐边界框。
它主要用于渲染,但在这种情况下,它为我们提供了对象的实际尺寸,准确地说是一个高度“圆形”的对象的尺寸。由于它是“沿轴对齐”,它相对于所有轴的旋转角度为零,但我们不需要旋转,它会在应用变换矩阵后计算,这是 Unity 关心的,所以你不需要手动做任何事情。