Unity3d之求物体体积

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

posted @ 2013-07-30 11:58  Java的Script  阅读(735)  评论(0)    收藏  举报