Unity用Mesh畫多邊形、圓形

首先貼上效果圖
在這裏插入圖片描述
在這裏插入圖片描述
上面兩個圖就是使用Unity的Mesh畫出的正五邊形和正八變形。

無論是研究過Mesh還是隻是有所聽說,應該都聽過網格,上面兩個圖形就是利用來網格的特性來實現的。

首先講一下Mesh原理
無論渲染什麼圖形,就需要用到mesh將圖形的形狀展示出來,Unity中所有圖形都是三角面組成,例如一個正方形
在這裏插入圖片描述
一個正方形是由定點組成的兩個三角片組成(三角形a和b),012組成三角形a,023組成三角形b,由此組成了一個正方形。注意,三角形的三個頂點排列必須是順時針,如果是逆時針,在反面纔會看到。

多邊形也是類似原理,如圖在這裏插入圖片描述
代碼

	public Button DrawPolygonButton;
	public InputField countInput;
	[HideInInspector]
	public GameObject drawGo;

	[HideInInspector]
	public MeshFilter meshFilter;

	[HideInInspector]
	public MeshRenderer meshRenderer;

	int count;

	void Awake(){
		DrawPolygonButton.transform.GetChild (0).GetComponent<Text> ().text = "DrawPolygon";
		DrawPolygonButton.onClick.AddListener (DrawPolygon);
	
		countInput.onValueChanged.AddListener ((string a) => {
			if (!string.IsNullOrEmpty(a)){
				count = System.Convert.ToInt32(a);
			}
		});
	}

	Mesh PrepareMesh(){
		drawGo = new GameObject ("DrawWithMesh");
		drawGo.transform.SetParent (transform);
		drawGo.transform.localPosition = Vector3.zero;
		drawGo.transform.localScale = Vector3.one;

		meshRenderer = drawGo.AddComponent<MeshRenderer> ();
		meshRenderer.material = mat;

		meshFilter = drawGo.AddComponent<MeshFilter> ();
		Mesh mesh = meshFilter.mesh;
		mesh.Clear();

		return mesh;
	}

	void DrawPolygon(){
		int circle_count = count;
		Mesh mesh = PrepareMesh ();
		Vector3[] vertices = new Vector3[circle_count + 1];
		vertices[0] = Vector3.zero;
		float pre_rad = Mathf.Deg2Rad * 360 / circle_count;
		for (int i = 0; i < circle_count; i++) {
			float deg = -i * pre_rad;
			float x = Mathf.Cos (deg);
			float y = Mathf.Sin (deg);
			vertices [i + 1] = new Vector3 (x, y, 0) * 3;
		}
		mesh.vertices = vertices;	

		int[] triangles = new int[circle_count * 3];
		for (int i = 0; i < triangles.Length; i+=3) {
			int first = 0;
			int second = i / 3 + 1;
			int third = second + 1;
			if (third > circle_count) {
				third = 1;
			}
			triangles [i] = first;
			triangles [i + 1] = second;
			triangles [i + 2] = third;
		}
		mesh.triangles = triangles;
	}

如果要畫圓形,則適量增加count數量就行

其他

更多Blog請見:https://yiyuan1130.github.io/
Github地址:https://github.com/yiyuan1130

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章