Unity3D之獲取BoxCollider八個點的世界座標

我們想把場景中的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
using UnityEngine;
using System.Collections;
  
public class Test : MonoBehaviour
{
    //8個標誌位 ,用來在scene裏預覽
    public Transform[] points;
    //需要提取Boxcollier頂點的對象
    public BoxCollider cube;
  
  
    void Start()
    {
        //父節只能調節位置, 不能調節旋轉和縮放。
        Transform parent = cube.transform.parent;
        while(parent!=null)
        {
            parent.localRotation = Quaternion.Euler(Vector3.zero);
            parent.localScale = Vector3.one;
            parent = parent.parent;
        }
    }
  
    void Update()
    {
        Vector3 [] veces = GetBoxColliderVertexPositions(cube);
        for(int i =0; i< veces.Length; i++)
        {
            points[i].transform.position = veces[i];
        }
    }
  
    Vector3[] GetBoxColliderVertexPositions (BoxCollider boxcollider)
    {
        var vertices = new Vector3[8];
        //下面4個點
        vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[1] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[2] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        //上面4個點
        vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[5] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[6] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
  
        return vertices;
    }
}


最後,歡迎大家測試~ 歡迎在下面給我留言~
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章