您当前的位置: 首页 >  unity

CoderZ1010

暂无认证

  • 2浏览

    0关注

    168博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Unity 如何让BoxCollider自适配大小

CoderZ1010 发布时间:2021-11-11 12:41:35 ,浏览量:2

上图例为一艘货运船上装载了若干个危险品模型,它们有一个空父级,给该父级物体添加BoxCollider碰撞盒时其Size默认大小为1, 如何给父物体添加BoxCollider碰撞盒时使其Size大小自适配包含所有子物体模型,而不是手动去调整该BoxCollider大小?

包围盒Bounds类为我们提供了解决办法,下面编写小工具:

using UnityEngine;
using UnityEditor;

public class BoundsTool
{
    [MenuItem("SKFramework/Bounds/Auto BoxCollider")]
    private static void AutoBoxCollider()
    {
        //如果未选中任何物体 返回
        GameObject gameObject = Selection.activeGameObject;
        if (gameObject == null) return;
        //计算中心点
        Vector3 center = Vector3.zero;
        var renders = gameObject.GetComponentsInChildren();
        for (int i = 0; i < renders.Length; i++)
        {
            center += renders[i].bounds.center;
        }
        center /= renders.Length;
        //创建边界盒
        Bounds bounds = new Bounds(center, Vector3.zero);
        foreach (var render in renders)
        { 
            bounds.Encapsulate(render.bounds);
        }
        //先判断当前是否有碰撞器 进行销毁
        var currentCollider = gameObject.GetComponent();
        if (currentCollider != null) Object.DestroyImmediate(currentCollider); 
        //添加BoxCollider 设置中心点及大小
        var boxCollider = gameObject.AddComponent();
        boxCollider.center = bounds.center - gameObject.transform.position;
        boxCollider.size = bounds.size;
    }
}

加入上述工具后,在场景中进行测试,可见添加的BoxCollider已经自动适配大小,包含所有子物体:

关注
打赏
1653184800
查看更多评论
立即登录/注册

微信扫码登录

0.0506s