用unity的mesh画圆

这几天没事做,用mesh画个圆玩玩,本来想用圆的轨迹方程(x-x0^2 + (y-y0)^2 =R^2来获取圆的点的,再用相邻的两点和圆心画一个三角面,最后拼成一个“圆”。但是数学学不好,看到根号和平方我都怕了,最后决定先画一块三角面,再通过他旋转一周就可以得到一个"圆"了。这个三角形是一个等边三角形,假如圆心坐标是(0,0),圆上的第一个点为(-3,0),如果这个圆是 由36个三角面组成的画,那么没个三角面的顶角为360/36=10度,再用三角函数求出第二个点的坐标,这就得到了三角面,再把这个三角面旋转36次,每次旋转10度就是一个圆了。看看代码吧,呵呵~~~

先建一个GameObject,命名为triangle,绑定MeshTest.js,再做成预制。

MeshTest.js:

function Start () {

	gameObject.AddComponent("MeshFilter");
	
	gameObject.AddComponent("MeshRenderer");
	
	var mesh : Mesh = GetComponent(MeshFilter).mesh;

	mesh.Clear();
	
    var v:Vector3[]=new Vector3[3];
    
    var v2:Vector2[]=new Vector2[3];
    
    v[0]=Vector3(0,0,0);
    
    v[1]=Vector3(-3,0,0);
    
    v[2]=Vector3(-3*Mathf.Cos(10*Mathf.Deg2Rad),-3*Mathf.Sin(10*Mathf.Deg2Rad));
    
	mesh.vertices = v;
	
	mesh.uv = v2;
	
    mesh.triangles = [0, 1, 2];
	
}

先建一个circle.js脚本,绑定在摄像机上就行,再把里面的triangle对象绑定我们的预制triangle就行了。

circle.js:

var triangles:GameObject;
function Start () {
   for(var i:int=0;i<36;i++){
      var obj:GameObject=Instantiate(triangles,Vector3(0,0,0),Quaternion.identity)as GameObject;
      obj.transform.RotateAround(Vector3(0,0,0), Vector3(0,0,1), i*10.0);
   }
   
}

运行一下就能看到如下效果:

用unity的mesh画圆_第1张图片


你可能感兴趣的:(用unity的mesh画圆)