问题描述:
一般在unity项目制作过程中,遇到的小问题基本琢磨琢磨一会,或者CSDN就能解决,也懒的不想写mark -( - _ - )- 但是一旦遇到卡克三四个小时以上的崩溃的问题,就想记录下。不管是不是因为自己脑瘫不会算1+1=2.。。。。。。。。。
这次的bug背景代码比较多(超长算法横纵长度。。。),所以在解决过程当中走了很多弯路,始终没有踩到点,也根本没想到原因在于unity本身的一个坑上:
利用unity自有打包函数获取模型的modelSize在x,y,z上的大小,网上已有方案:
- meshRenderer.bounds.size;
- meshFilter.mesh.bounds.size;
- collider.bounds.size;
- 自己包装算法获得模型长宽高大小;
据说,1中值的结果真实反应出有MeshRenderer这个组件的模型的尺寸,已自动计算缩放,不须要再乘以localScale。而通过MeshFilter获得原始模型的mesh,该值返回的结果是原始mesh的尺寸。若要获得模型的尺寸大小还须要乘以模型的localScale。 当然是先用meshRenderer啦!然后就出问题了:模型旋转变换后计算的结果值有偏差,而且我这里还是随机性的!
else if (item.Key.Thisposition ==3)
{
GameObject host = item.Key.parentHouse.CubeHouse;
GameObject custom = item.Value.parentHouse.CubeHouse;
custom.transform.position = host.transform.position + host.transform.right *
(-(custom.GetComponent<MeshRenderer>().bounds.size.z / 2 + host.GetComponent<MeshRenderer>().bounds.size.x / 2 + 10));
custom.transform.LookAt(host.transform, Vector3.up);
GameObject road = Instantiate(cubHouseRoad, item.Key.parentHouse.CubeHouse.transform.parent);
road.transform.position = host.transform.position + host.transform.right *
(-(host.GetComponent<MeshRenderer>().bounds.size.x / 2 + 5));
road.transform.LookAt(host.transform, Vector3.up);
road.transform.localScale = new Vector3(1, 1, 10);
}
原因分析:
先放上外贴链接:https://forum.unity.com/threads/meshrenderer-has-wrong-bounds-when-rotated.736475/ 怕失效补个图: 也就是说,我以为MeshRenderer.bounds.size值的结果,是等价于mesh.bounds.size的值的结果乘以localScale的。
解决方案:
解决方案?笑死,用meshFilter.mesh,bounds.size就行了。。。。。。别忘了乘localScale。
unity 版本 2019.4
|