unity中已知幾個點用mesh讓這些點在一個平面上


為了方便把這些cube放到了一個空的父物體下(這里就不再用圖片展示了)

 

 

這個代碼就是把獲取所有的cube的position存到了一個列表中

void DrawMesh(Vector3[] vec)
{

//創建一個空的gameObject 這里我的名字就叫做box
GameObject box = new GameObject("Box");

//為其添加MeshFilter、MehsRenderer   它獲取mesh資源,運用MeshRenderer渲染到屏幕上

box.AddComponent<MeshFilter>();
box.AddComponent<MeshRenderer>();

Mesh mesh = new Mesh();

//將這些cube的position存到了一個數組中

Vector3[] top_Vec = vec;

List<int> top_list = new List<int>();

for (int i = 0; i < top_Vec.Length - 1; i++)
{

  //通過不同的三個頂點為網格創建三角形,網格是由多個三角形構成的一個面,構成三角形的個數為(n-2)個(注:注意這個小練習的頂點有5個但實際上是由3個三角形拼成的,但是top_list中有4組信息,但我們可以將這個列表計算一下

  0,1,4       1,2,3      2,3,2     3,4,1      這四組單2,3,2 這一組其實是一條線並非一個三角形)

  top_list.Add(i);
  top_list.Add(i + 1);
  top_list.Add(top_Vec.Length - i - 1);
}

//儲存定點信息
mesh.vertices = top_Vec;

//將遍歷三角形的頂點順序儲存到列表中並轉化成數組, 我認為它會自動解析這個數組(以每三個點進行解析吧) 
mesh.triangles = top_list.ToArray();

//重新計算法線、uv

mesh.RecalculateBounds();
mesh.RecalculateNormals();

box.GetComponent<MeshFilter>().mesh = mesh;

//這里的材質是我自己設置的
box.GetComponent<MeshRenderer>().material = material;

 

 

注意:1.想要構成一個面這些點必須按照順序擺放,如果不按順序會構不成一個面或者其中某幾個點構成一個面(說白了就是缺少三角形)

   2.這些點建議按順時針擺放,因為生成的mesh渲染的時候是單面材質在正面可以看到渲染而背面卻看不到,如果不小心按逆時針擺放的話把shader -> Nature->SpeedTree  cill選擇off 修改材質的shader就可以看到了(原因我還沒搞懂)

 

 效果如圖


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM