您当前的位置: 首页 >  unity

Allen Su

暂无认证

  • 2浏览

    0关注

    431博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Unity3D 教程系列第 19 篇】Unity 中根据长方体模型的尺寸添加碰撞盒 BoxCollider

Allen Su 发布时间:2019-11-07 20:30:07 ,浏览量:2

这是【Unity3D 教程系列第 19 篇】,如果觉得有用的话,欢迎关注专栏。

前言: 给一个长方体模型添加碰撞盒 BoxCollider,即使手动拖拽也费不了多长时间,但手动拖动不仅显得 Low ,而且准确率也不高,对于重复的工作,除非实现不了的功能,否则坚决反对用手动这种方式。

文章目录
      • 操作一:给一般长方体模型添加 BoxCollider
      • 操作二:根据长方体一条对角线的两顶点,添加 BoxCollider

操作一:给一般长方体模型添加 BoxCollider

思路 根据模型的 Mesh ,我们可以知道模型的信息,获取到的信息可以赋值给碰撞盒的大小 size 和中心 center 。

举例说明 这里我以 Unity 自带的 Cube 为例,通过编辑器方式,给 Cube 加一个和其一样大小的 BoxCollider,先来看一下效果演示图 在这里插入图片描述 点击 A 按钮后,会以所选物体为父物体,添加一个 BoxCollider,实现代码如下所示

    /// 
    /// 给普通的长方体模型添加 BoxCollider
    /// 
    public void AddNormalBoxCollider()
    {
        // 所选对象
        var selectObj = Selection.activeGameObject;
        var bounds = selectObj.GetComponent().sharedMesh.bounds;

        // 获得模型原始尺寸的大小
        var sizeX  = bounds.size.x * selectObj.transform.localScale.x;
        var sizeY  = bounds.size.y * selectObj.transform.localScale.y;
        var scaleZ = bounds.size.z * selectObj.transform.localScale.z;

        // 添加碰撞盒,并设置大小及中心点
        var boxCollider = Undo.AddComponent(selectObj);
        boxCollider.size   = new Vector3(sizeX, sizeY,scaleZ);
        boxCollider.center = bounds.center;
    }
操作二:根据长方体一条对角线的两顶点,添加 BoxCollider

不过,操作一只适合长方体模型,复杂一点的模型就无法通过它来实现了。可有时候一个模型中,有一部分是长方体,除了用手拖的方式添加碰撞盒,有没有可以用代码实现的呢 ?

这就是我们下面需要说的操作二了。

思路 通过选取一条对角线的两顶点,根据这两个顶点我们可以知道其它 6 个顶点的信息,比较这 8 个顶点的位置信息,我们就可以给长方体添加一个指定大小的 BoxCollider 。

举例说明 我们先来看效果演示图 在这里插入图片描述 实现代码如下所示

 	// 通过点击获取到的顶点列表
    public List VertexList; 

    /// 
    /// 通过长方体的一条对角线两个顶点,确定一个 BoxCollider
    /// 
    public void VertexBox()
    {
        if (VertexList == null) VertexList = new List();
        VertexList.Add(Selection.activeGameObject.transform.position);
        if (VertexList.Count != 2) return;
        for (var i = 0; i             
关注
打赏
1656491068
查看更多评论
0.2076s