Unity通過腳本創(chuàng)建網(wǎng)格Mesh的方法
1.創(chuàng)建一個(gè)帶Mesh的物體
Unity中的網(wǎng)格作為組件不能脫離物體單獨(dú)存在
新建腳本CreateMesh
public class CreateMesh: MonoBehaviour { void Start() { //該方法會(huì)新建一個(gè)名為Mesh的GameObject,該物體上包含一個(gè) MeshFilter 和一個(gè) MeshRenderer GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer)); gameObject.transform.localScale = new Vector3(30, 30, 1);//放大一點(diǎn),避免到時(shí)候看不見 } }
然后將腳本搭載到場景中任意物體上
點(diǎn)擊運(yùn)行后場景出現(xiàn)名為Mesh的物體,包含MeshFilter
和 MeshRenderer
,也可自行添加組件
這里Mesh Filter中的Mesh為None
因?yàn)槲覀冞€沒有創(chuàng)建Mesh
2.通過腳本創(chuàng)建Mesh
Unity中Mesh由頂點(diǎn)、三角面和UV坐標(biāo)組成
如果我們創(chuàng)建一個(gè)正方形,需要先聲明相應(yīng)數(shù)組
修改Create Mesh
//public class CreateMesh: MonoBehaviour //{ // void Start() //{ Vector3[] vertices = new Vector3[0]; //聲明頂點(diǎn)數(shù)組 Vector2[] uv = new Vector2[0]; //聲明uv向量 int[] triangles = new int[0]; //聲明三角形數(shù)組 Mesh mesh = new Mesh(); //聲明網(wǎng)格 //對網(wǎng)格進(jìn)行賦值引用 mesh.vertices = vertices; mesh.uv = uv; mesh.triangles = triangles; //GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer)); //gameObject.transform.localScale = new Vector3(30, 30, 1); //將新建物體的 MeshFilter 設(shè)為新建的 網(wǎng)格(Mesh) gameObject.GetComponent<MeshFilter>().mesh = mesh; //} //}
這時(shí)運(yùn)行后Mesh Filter 中 Mesh 不再是null,而是我們剛剛聲明的 網(wǎng)格,只是這個(gè)網(wǎng)格還沒有相應(yīng)的數(shù)據(jù)
繼續(xù)修改CreateMesh
//public class GameHandler5 : MonoBehaviour //{ //這里聲明了一個(gè)材質(zhì),給它賦值一個(gè)帶貼圖的材質(zhì),不用材質(zhì)也行 public Material material; //void Start() //{ //這里我們創(chuàng)建一個(gè)正方形網(wǎng)格,所以需要4個(gè)頂點(diǎn)、4個(gè)UV點(diǎn)和6條邊 Vector3[] vertices = new Vector3[4]; Vector2[] uv = new Vector2[4]; int[] triangles = new int[6]; //聲明頂點(diǎn)的位置 vertices[0] = new Vector3(0, 1); vertices[1] = new Vector3(1, 1); vertices[2] = new Vector3(0, 0); vertices[3] = new Vector3(1, 0); //聲明UV的位置 uv[0] = new Vector2(0, 1); uv[1] = new Vector2(1, 1); uv[2] = new Vector2(0, 0); uv[3] = new Vector2(1, 0); //聲明三角邊,這里三角邊是根據(jù)上面的頂點(diǎn)來進(jìn)行連接的,每三個(gè)頂點(diǎn)構(gòu)成一個(gè)三角邊 //這里后面的int類型參數(shù)對應(yīng) vertices[]數(shù)組中的頂點(diǎn) triangles[0] = 0; triangles[1] = 1; triangles[2] = 2; triangles[3] = 2; triangles[4] = 1; triangles[5] = 3; //Mesh mesh = new Mesh(); //將設(shè)置好的參數(shù)進(jìn)行賦值 mesh.vertices = vertices; mesh.uv = uv; mesh.triangles = triangles; //GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer)); //gameObject.transform.localScale = new Vector3(30, 30, 1); //gameObject.GetComponent<MeshFilter>().mesh = mesh; gameObject.GetComponent<MeshRenderer>().material = material; } }
這個(gè)正方形存在 4個(gè)頂點(diǎn)、分為兩個(gè)三角形共 6 條邊、和 4 頂點(diǎn) UV
運(yùn)行結(jié)果
圖片很暗是因?yàn)閳鼍爸袥]有光照
到此這篇關(guān)于Unity通過腳本創(chuàng)建Mesh(網(wǎng)格)的文章就介紹到這了,更多相關(guān)Unity創(chuàng)建Mesh內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)在窗體上的統(tǒng)計(jì)圖效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C#三種判斷數(shù)據(jù)庫中取出的字段值是否為空(NULL) 的方法
最近操作數(shù)據(jù)庫,需要判斷返回的字段值是否為空,在網(wǎng)上收集了3種方法供大家參考2013-04-04C#實(shí)現(xiàn)將數(shù)組內(nèi)元素打亂順序的方法
這篇文章主要介紹了C#實(shí)現(xiàn)將數(shù)組內(nèi)元素打亂順序的方法,涉及C#數(shù)組遍歷及隨機(jī)數(shù)操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#實(shí)現(xiàn)貨幣金額數(shù)字轉(zhuǎn)大寫漢字
這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)貨幣金額數(shù)字轉(zhuǎn)大寫漢字功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01