用unity的mesh画圆

来源:互联网 发布:马哥linux 编辑:程序博客网 时间:2024/04/28 19:20

这几天没事做,用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);   }   }

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



原创粉丝点击