Unity子对象旋转缩放后碰撞器与渲染器表现异常咨询
关于Unity 2017.3.1p1中碰撞器与渲染器不一致问题的解答
先直接给结论:你的操作本身没有逻辑错误,这种碰撞器和渲染器表现不匹配的情况,基本可以确定是Unity 2017.3.1p1版本的已知Bug。
为什么操作没问题?
你做的步骤——创建Plane并设置旋转/缩放、添加子Cube再设置它的变换参数——都是Unity里完全常规的层级变换操作,子物体继承父物体的变换是引擎的标准行为,本身不存在操作失误的地方。
为什么会出现碰撞器和渲染器不一致?
在Unity 2017这类较早的版本中,当父物体同时存在非均匀缩放(比如你的Plane缩放是(3.21,1,2.43),三个轴缩放比例不同)和旋转时,子物体的碰撞器计算很容易出问题。这是因为旧版本的碰撞器变换算法在处理“父物体非均匀缩放+旋转”的复合变换时存在缺陷,导致碰撞器的实际边界无法正确匹配渲染出来的网格形状。
你可以做个简单验证:把Plane的缩放改成均匀缩放(比如(3,3,3)),再看子Cube的碰撞器和渲染器是否对齐——大概率就正常了,这就能直接佐证是非均匀缩放+旋转的组合触发了旧版本的Bug。
临时解决办法(针对2017.3.1p1版本)
如果暂时不能升级Unity版本,可以试试这些方案:
- Bake父物体变换到子物体:选中子Cube,先记录它的局部变换参数,取消父子关系后,手动计算并应用父物体的世界空间变换到子物体上,让子物体成为顶级物体,这样碰撞器就不会受父物体的非均匀缩放影响。
- 替换碰撞器类型:把Cube的默认
Box Collider换成Mesh Collider,若需要物理交互则勾选Convex。Mesh Collider基于实际渲染网格计算,能更准确匹配视觉表现,不过注意它的性能开销比Box Collider大。 - 手动调整碰撞器:直接修改Box Collider的
Center和Size参数,手动对齐到渲染网格的位置和大小。 - 升级补丁版本:Unity 2017.3后续有多个补丁更新,你可以尝试升级到2017.3的最新补丁版,很多这类变换相关的Bug在后续补丁中被修复了。
内容的提问来源于stack exchange,提问作者AminSojoudi




