在对物体进行体积计算的时候,很容易因为物体的复杂父子关系而导致计算失败,所以需要对其所有的子节点以及本身的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