Unity 画三角形

首先创建Unity工程,接着创建一个空的游戏对象,然后给该游戏对象绑定Mesh Filter组件 与 Mesh Renderer组件。
Mesh Filter组件:表示网格面,这个网格面是由我们使用代码将所有三角形拼接起来生成的面。

Mesh Renderer组件:表示表示网格的渲染,可设置一个渲染的材质,它包括贴图与颜色。

Unity 画三角形_第1张图片


       如下图所示,我说说里面比较重要的属性。Mesh Renderer中,Materials下拉列表中可设置网格模型的材质,此时我们设置了一个红色的材质。 Mesh Filter:目前为None,也不用再编辑器中为它赋值,因为这个网格模型我们会在代码中生成并且赋值。在下面就是方刚我们设置绿色的材质资源,Shader中设置了贴图的属性,目前是GUI/ TextShader。它表示这个材质的渲染级别在GUI上,就是优先级是最一层的。举个例子无论在这个网格模型的前面绘制多少模型,它永远都会在最前面显示。


Unity 画三角形_第2张图片



 

OK,现在资源文件都已经准备完毕,下面我们学习如何来绘制一个三角形,从简单的开始。把下面的代码绑定在摄像机对象当中。

using UnityEngine;
using System.Collections;

public class Scene : MonoBehaviour {
	
	
	
	

	// Use this for initialization
	void Start () 
	{
		//获取MeshFilter对象  现在还是空的。
		MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));
		//得到对应的网格对象
		Mesh mesh = meshFilter.mesh;
		//三角形顶点坐标数组
		Vector3[] vertices = new Vector3[3];
		//三角形的坐标点  ,这里先不考虑Z轴
		vertices[0] = new Vector3(0,0,0);
		vertices[1] = new Vector3(0,1,0);
		vertices[2] = new Vector3(1,0,0);
		//三角形顶点数组ID
		int[] triangles = new int[3];
		
		triangles[0] = 0;
		triangles[1] = 1;
		triangles[2] = 2;
		
	//这里是将模型的顶点数组与坐标数组赋值给网络模型,还记得刚刚在
	//创建MeshFilter时,当时没有在编辑器里为网络模型赋值,实际上代码走到这里就会重新为
	//	网络模型创建MeshFilter赋值的,接着我们再代码中绘制的三角形就会显示的窗口中
		mesh.vertices = vertices;
		mesh.triangles = triangles;
	}
	
	
	// Update is called once per frame
	void Update () {
	
	}
}

                  Unity 画三角形_第3张图片  


  之后,我们来练习一下绘制4个三角形。

using UnityEngine;
using System.Collections;

public class Scene : MonoBehaviour
{
	private int VERTICES_COUNT = 6;
	
	void Start()
	{
		MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));
		
		Mesh mesh = meshFilter.mesh;
		
		Vector3[] vertices = new Vector3[VERTICES_COUNT];
		
		int triangles_count = VERTICES_COUNT -2;
		vertices[0] = new Vector3(0,0,0);
		vertices[1] = new Vector3(0,1,0);
		vertices[2] = new Vector3(1,0,0);
		vertices[3] = new Vector3(1,1,0);
		vertices[4] = new Vector3(2,0,0);
		vertices[5] = new Vector3(2,1,0);
		
		int[] triangles = new int[triangles_count * 3];
		
		triangles[0] = 0;
		triangles[1] = 1;
		triangles[2] = 2;
		
		triangles[3] = 3;
		triangles[4] = 2;
		triangles[5] = 1;
		
		triangles[6] = 2;
		triangles[7] = 3;
		triangles[8] = 4;
		
		triangles[9] = 5;
		triangles[10] = 4;
		triangles[11] = 3;
		
		mesh.vertices = vertices;
		mesh.triangles = triangles;
		
	}
}

Unity 画三角形_第4张图片


        改进算法后。


using UnityEngine;
using System.Collections;

public class Scene : MonoBehaviour
{
	private int VERTICES_COUNT = 6;
	
	void Start()
	{
		MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));
		
		Mesh mesh = meshFilter.mesh;
		
		Vector3[] vertices = new Vector3[VERTICES_COUNT];
		vertices[0] = new Vector3(0,0,0);
		vertices[1] = new Vector3(0,1,0);
		vertices[2] = new Vector3(1,0,0);
		
		vertices[3] = new Vector3(1,1,0);
		vertices[4] = new Vector3(2,0,0);
		vertices[5] = new Vector3(2,1,0);
		
		int triangles_count = VERTICES_COUNT - 2;
		int[] triangles = new int[triangles_count * 3];
		
		for(int i =0;i < 4; i++)
		{
			for(int j =0;j < 3;j++)
			{
				if(i % 2 ==0)
				{
					triangles[i* 3 +j] = i+j;
				}
				else
				{
					triangles[i * 3 +j] = i + 2 -j;
				}
				
			}
		}
		mesh.vertices = vertices;
		mesh.triangles = triangles;
		
		
	}
}



你可能感兴趣的:(Unity资料整理)