Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class CreateCircleScript: MonoBehaviour {
- public int edges = 4;
- public float radius = 5.000000f;
- private float degresInRadians, pi = 3.14f;
- Mesh mesh = null;
- // Use this for initialization
- void Start () {
- if(mesh == null) {
- mesh = gameObject.AddComponent<MeshFilter>().mesh;
- gameObject.AddComponent<MeshRenderer>();
- }
- mesh = new Mesh();
- mesh.name = "Circle";
- Vector3[] vertices = new Vector3[edges];
- Vector3[] normals = new Vector3[edges];
- Vector2[] uvs = new Vector2[edges];
- int[] triangles = new int[(edges-2)*3];
- degresInRadians = (2*pi)/edges;
- for(short index = 0; index < edges; ++index)
- {
- float angleInRadians = degresInRadians * index;
- vertices[index] = new Vector3(radius * Mathf.Cos(angleInRadians), radius * Mathf.Sin(angleInRadians), 0);
- }
- for(short index = 0; index < edges-2; ++index)
- {
- triangles[index*3] = 0;
- triangles[index*3+1] = index+2;
- triangles[index*3+2] = index+1;
- }
- Vector3 normal,side1,side2;
- side1 = vertices[1] - vertices[0];
- side2 = vertices[edges-1] - vertices[0];
- normal = -Vector3.Cross(side1,side2).normalized;
- for(short index = 0; index < edges; ++index)
- normals[index] = normal;
- for(short index = 0; index < edges; ++index)
- {
- uvs[index] = new Vector2(vertices[index].x, vertices[index].y);
- }
- mesh.vertices = vertices;
- mesh.triangles = triangles;
- mesh.normals = normals;
- mesh.uv = uvs;
- gameObject.GetComponent<MeshFilter>().mesh = mesh;
- gameObject.renderer.material.shader = Shader.Find("Diffuse");
- }
- int backEdge = 4;
- float backRadius = 5.000000f;
- // Update is called once per frame
- void Update () {
- if(edges != backEdge) {
- if(edges < 3)
- edges = 3;
- else {
- backEdge = edges;
- GetComponent<MeshFilter>().mesh.Clear();
- Start();
- }
- }
- else if(radius != backRadius) {
- if(radius < 1.000000f)
- radius = 1;
- else {
- backRadius = radius;
- setAndGetradiusOfVertices(radius);
- }
- }
- }
- void setAndGetradiusOfVertices(float radius2) {
- float angleRadians;
- degresInRadians = 2*pi/edges;
- Mesh mesh = gameObject.GetComponent<MeshFilter>().mesh;
- Vector3[] vertices = mesh.vertices;
- Vector2[] uv = mesh.uv;
- for(int index = 0; index < edges; ++index)
- {
- angleRadians = degresInRadians * index;
- vertices[index] = new Vector3(radius2 * Mathf.Cos(angleRadians),radius2 * Mathf.Sin(angleRadians),0);
- uv[index] = new Vector2(vertices[index].x,vertices[index].y);
- mesh.vertices = vertices;
- mesh.uv = uv;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement