Unity通過腳本創建Mesh(網格)


1.創建一個帶Mesh的物體

Unity中的網格作為組件不能脫離物體單獨存在
新建腳本CreateMesh

public class CreateMesh: MonoBehaviour
{
    void Start()
    {
	    			//該方法會新建一個名為Mesh的GameObject,該物體上包含一個 MeshFilter 和一個 MeshRenderer
        GameObject gameObject = new GameObject("Mesh", typeof(MeshFilter), typeof(MeshRenderer));
        gameObject.transform.localScale = new Vector3(30, 30, 1);//放大一點,避免到時候看不見
    }
}

然后將腳本搭載到場景中任意物體上
點擊運行后場景出現名為Mesh的物體,包含MeshFilter MeshRenderer,也可自行添加組件


這里Mesh Filter中的Mesh為None
因為我們還沒有創建Mesh

2.通過腳本創建Mesh

Unity中Mesh由頂點、三角面和UV坐標組成
如果我們創建一個正方形,需要先聲明相應數組
修改Create Mesh

//public class CreateMesh: MonoBehaviour
//{
   // void Start()
    //{
        Vector3[] vertices = new Vector3[0];	//聲明頂點數組
        Vector2[] uv = new Vector2[0];		    //聲明uv向量
        int[] triangles = new int[0];		    //聲明三角形數組

        Mesh mesh = new Mesh();				   //聲明網格

	    //對網格進行賦值引用
        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 設為新建的 網格(Mesh)
        gameObject.GetComponent<MeshFilter>().mesh = mesh;
    //}
//}

這時運行后Mesh Filter 中 Mesh 不再是null,而是我們剛剛聲明的 網格,只是這個網格還沒有相應的數據

繼續修改CreateMesh

//public class GameHandler5 : MonoBehaviour
//{
    //這里聲明了一個材質,給它賦值一個帶貼圖的材質,不用材質也行
    public Material material;

    //void Start()
    //{
	//這里我們創建一個正方形網格,所以需要4個頂點、4個UV點和6條邊
        Vector3[] vertices = new Vector3[4];	
        Vector2[] uv = new Vector2[4];
        int[] triangles = new int[6];

	//聲明頂點的位置
        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);

	//聲明三角邊,這里三角邊是根據上面的頂點來進行連接的,每三個頂點構成一個三角邊
        //這里后面的int類型參數對應 vertices[]數組中的頂點
        triangles[0] = 0;
        triangles[1] = 1;
        triangles[2] = 2;

        triangles[3] = 2;
        triangles[4] = 1;
        triangles[5] = 3;

        //Mesh mesh = new Mesh();

	//將設置好的參數進行賦值
        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;
    }
}

這個正方形存在 4個頂點、分為兩個三角形共 6 條邊、和 4 頂點 UV
運行結果


圖片很暗是因為場景中沒有光照


免責聲明!

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



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