这几天没事做,用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:
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); } }
运行一下就能看到如下效果: