Unity3D之获取BoxCollider八个点的世界坐标

来源:互联网 发布:淘宝司法拍卖问题 编辑:程序博客网 时间:2024/06/05 17:35
我们想把场景中的BoxCollider的坐标点导出出来让服务器也能用。虽然BoxCollider自身的大小可以获取出来,但是如果有父对象,并且有坐标的变化那算起来就比较麻烦了。还好unity提供了一个方法,真的很便捷。如下图所示,我用了8个标记点来标记获取到的boxcollider的坐标。旋转、缩放都可以计算出正确的坐标点来。

 

[C#] 纯文本查看 复制代码
?
 
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
usingUnityEngine;
usingSystem.Collections;
  
publicclass Test : MonoBehaviour
{
    //8个标志位 ,用来在scene里预览
    publicTransform[] points;
    //需要提取Boxcollier顶点的对象
    publicBoxCollider cube;
  
  
    voidStart()
    {
        //父节只能调节位置, 不能调节旋转和缩放。
        Transform parent = cube.transform.parent;
        while(parent!=null)
        {
            parent.localRotation = Quaternion.Euler(Vector3.zero);
            parent.localScale = Vector3.one;
            parent = parent.parent;
        }
    }
  
    voidUpdate()
    {
        Vector3 [] veces = GetBoxColliderVertexPositions(cube);
        for(inti =0; i< veces.Length; i++)
        {
            points[i].transform.position = veces[i];
        }
    }
  
    Vector3[] GetBoxColliderVertexPositions (BoxCollider boxcollider)
    {
        var vertices = newVector3[8];
        //下面4个点
        vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + newVector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[1] = boxcollider.transform.TransformPoint( boxcollider.center + newVector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[2] = boxcollider.transform.TransformPoint( boxcollider.center + newVector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + newVector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        //上面4个点
        vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + newVector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[5] = boxcollider.transform.TransformPoint( boxcollider.center + newVector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[6] = boxcollider.transform.TransformPoint( boxcollider.center + newVector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + newVector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
  
        returnvertices;
    }
}


最后,欢迎大家测试~ 欢迎在下面给我留言~
0 0
原创粉丝点击