您的位置:首页 > 移动开发 > Unity3D

Unity3d之求物体体积

2013-07-30 11:58 169 查看
在对物体进行体积计算的时候,很容易因为物体的复杂父子关系而导致计算失败,所以需要对其所有的子节点以及本身的bounds进行计算。

我们目前的方法:

Renderer[] renders = GetComponentsInChildren<Renderer>();

if(GetComponent<Renderer>()!=null){
System.Array.Resize<Renderer>(ref renders,renders.Length+1);
renders[renders.Length-1] = GetComponent<Renderer>();
}
Quaternion ori = gameObject.transform.rotation;
gameObject.transform.rotation = Quaternion.Euler(0,0,0);
foreach(Renderer render in renders){
Vector3 vmax = render.bounds.max;
Vector3 vmin = render.bounds.min;
xmax = Mathf.Max(xmax,vmax.x);
ymax = Mathf.Max(ymax,vmax.y);
zmax = Mathf.Max(zmax,vmax.z);

xmin = Mathf.Min(xmin,vmin.x);
ymin = Mathf.Min(ymin,vmin.y);
zmin = Mathf.Min(zmin,vmin.z);
}
BoxCollider collider = gameObject.AddComponent<BoxCollider>();
Vector3 s = gameObject.transform.localScale;
Vector3 c = new Vector3((xmax + xmin)*0.5f,(ymax + ymin)*0.5f,(zmax + zmin)*0.5f) - transform.position;
collider.center = new Vector3(c.x/s.x,c.y/s.y,c.z/s.z);
collider.size = new Vector3((xmax - xmin)/s.x,(ymax - ymin)/s.y,(zmax - zmin)/s.z);

transform.rotation = ori;


这样就给模型绑定了对应的BoxCollider
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: