Bounds操作

一、增大Bounds以便包含所有点

    /// <summary>
    /// 增大Bounds,以便包含所有的点
    /// </summary>
    /// <param name="conent"></param>
    /// <param name="renderers"></param>
    /// <returns></returns>
    private static Bounds GetModelGroupBoundes(Vector3 conent,Renderer[] renderers) 
    {
        Bounds bounds = new Bounds(conent, Vector3.zero);

        foreach (var item in renderers)
        {
            //增大Bounds,以便包含该/point/
            bounds.Encapsulate(item.bounds);
        }

        return bounds;
    }

二、获取所有模型的公共Bounds中心点

    /// <summary>
    /// 获取所以模型组的Boundes中心点
    /// </summary>
    private static Vector3 GetModelGroupBoundesConent(Renderer[] renderers)
    {
        Vector3 conent = Vector3.zero;

        for (int i = 0; i < renderers.Length; i++) conent += renderers[i].bounds.center;

        //获取到中心点
        conent /= renderers.Length;

        return conent;
    }

三、合并多个模型并添加公共BoxCollider

    /// <summary>
    /// 合并多个模型的Bounds并添加公共BoxCollider
    /// </summary>
    [MenuItem("ChivaXR/Bounds/合并多个模型的Bounds并添加公共BoxCollider")]
   public static void AddBoxCollider() 
   {
        GameObject tmpSelectObj = Selection.activeGameObject;
        if (tmpSelectObj == null) return;

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

        Vector3 conent = GetModelGroupBoundesConent(renders);

        Bounds bounds = GetModelGroupBoundes(conent,renders);

        var currentCollider = tmpSelectObj.GetComponent<Collider>();
        if (currentCollider != null) GameObject.DestroyImmediate(currentCollider);
        
        //添加BoxCollider 设置中心点及大小
        BoxCollider boxCollider =  tmpSelectObj.AddComponent<BoxCollider>();
        boxCollider.center = bounds.center - tmpSelectObj.transform.position;
        boxCollider.size = bounds.size;
   }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值