Unity中建立自己的mesh以及動態修改mesh
阿新 • • 發佈:2019-01-22
開頭
最近發現有很多人不知道在unity中可以建立和修改mesh,以為mesh只能從3dmax等軟體中匯入,所以這篇就相當於科普了。
正文
首先介紹如何建立mesh。
先建立一個空物體,名為test。
然後為這個物體增加 meshrender 和 meshfilter 兩個元件
下面就要寫將要賦給它的指令碼了,先貼上程式碼,解釋在下面。
using UnityEngine;
using System.Collections;
public class Test: MonoBehaviour
{
void Start()
{
Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) };
Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) };
int[] newTriangles = {0,2,1,0,3,2};
Mesh mesh = new Mesh();
GetComponent<MeshFilter>().mesh = mesh;
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
要建立一個mesh必須要準備好三個陣列分別是頂點陣列,三角形陣列,uv陣列。
也可以用下面的程式碼賦值
int[] p = new int[10];
for (int i = 0; i <= 9; i++)
{
Console.Write("請輸入第{0}個值:",i+1);
p[i] = int.Parse(Console.ReadLine());
}
- 頂點陣列 包括這個mesh中所有的頂點,如 Vector3[] newVertices = { new Vector3(0, 0, 0), new Vector3(0, 1, 0), new Vector3(1, 1, 0), new Vector3(1, 0, 0) }; 其中有四個頂點,分別為正方形四個角。
- 三角形陣列 指定如何構成每個三角形,同時也確定了三角形的個數,如 int[] newTriangles = {0,2,1,0,3,2}; 這行程式碼表示0,2,1(對應著newVertices[0],newVertices [2],newVertices [1]),構成第一個三角形的三個角,數字的順序表示順逆時針,同時確定了三角形的正反面,後面的0,3,2同理,這就代表此mesh有兩個三角形。
- uv陣列 這是一個vector2陣列,用來確定頂點陣列中每個頂點的uv座標,這在下面將演示給大家看。
程式碼寫好之後,把指令碼貼到Test物體上,然後設定一個material,如下圖:
下面是執行後的圖片:
至於為什麼uv陣列是什麼,你可以認為這張圖片的四個角的uv座標分別為(0,0),(1,0),(1,1),(1,0),如果我把上面程式碼中的uv陣列改成 Vector2[] newUV = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(0.5f, 1), new Vector2(0.5f, 0) }; 那就會變成下面這個樣子:
有一點要注意的是,頂點陣列中的頂點座標都是在模型座標系中的,就是以剛開始建立的Test空物體的座標為原點。
以上只是簡單建立了一個平面mesh,至於如何建立3d mesh和修改mesh,相信聰明的你一定會啦。