Unity3d之求物体体积

本文介绍了一种在Unity中对复杂模型进行体积计算并自动绑定BoxCollider的方法。通过获取模型及其所有子对象的边界信息,计算出最大与最小坐标值,进而确定碰撞器的位置和大小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

转载于:https://www.cnblogs.com/cony138/p/3224846.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值