SHARE
TWEET

Viperion

a guest Sep 17th, 2013 14 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class CreateCircleScript: MonoBehaviour {
  5.        
  6.         public int edges = 4;
  7.         public float radius = 5.000000f;
  8.         private float degresInRadians, pi = 3.14f;
  9.         Mesh mesh = null;
  10.        
  11.         // Use this for initialization
  12.         void Start () {
  13.                 if(mesh == null) {
  14.                 mesh = gameObject.AddComponent<MeshFilter>().mesh;
  15.                         gameObject.AddComponent<MeshRenderer>();
  16.                 }
  17.                 mesh = new Mesh();
  18.                 mesh.name = "Circle";
  19.                
  20.                 Vector3[] vertices = new Vector3[edges];
  21.                 Vector3[] normals = new Vector3[edges];
  22.                 Vector2[] uvs = new Vector2[edges];
  23.                 int[] triangles = new int[(edges-2)*3];
  24.                
  25.                 degresInRadians = (2*pi)/edges;
  26.                 for(short index = 0; index < edges; ++index)
  27.                 {
  28.                         float angleInRadians = degresInRadians * index;
  29.                         vertices[index] = new Vector3(radius * Mathf.Cos(angleInRadians), radius * Mathf.Sin(angleInRadians), 0);                              
  30.                 }
  31.                
  32.                 for(short index = 0; index < edges-2; ++index)
  33.                 {
  34.                         triangles[index*3] = 0;
  35.                         triangles[index*3+1] = index+2;
  36.                         triangles[index*3+2] = index+1;
  37.                 }
  38.                
  39.                 Vector3 normal,side1,side2;
  40.                 side1 = vertices[1] - vertices[0];
  41.                 side2 = vertices[edges-1] - vertices[0];
  42.                 normal = -Vector3.Cross(side1,side2).normalized;
  43.                
  44.                 for(short index = 0; index < edges; ++index)
  45.                         normals[index] = normal;
  46.                
  47.                 for(short index = 0; index < edges; ++index)
  48.                 {
  49.                         uvs[index] = new Vector2(vertices[index].x, vertices[index].y);
  50.                 }
  51.                
  52.                 mesh.vertices = vertices;
  53.                 mesh.triangles = triangles;
  54.                 mesh.normals = normals;
  55.                 mesh.uv = uvs;
  56.                 gameObject.GetComponent<MeshFilter>().mesh = mesh;
  57.                
  58.                 gameObject.renderer.material.shader = Shader.Find("Diffuse");
  59.         }
  60.        
  61.         int backEdge = 4;
  62.         float backRadius = 5.000000f;
  63.         // Update is called once per frame
  64.         void Update () {
  65.             if(edges != backEdge) {
  66.                         if(edges < 3)
  67.                                 edges = 3;
  68.                         else {
  69.                             backEdge = edges;
  70.                             GetComponent<MeshFilter>().mesh.Clear();
  71.                             Start();
  72.                         }
  73.                 }
  74.                 else if(radius != backRadius) {
  75.                         if(radius < 1.000000f)
  76.                                 radius = 1.000000f;
  77.                         else {
  78.                                 backRadius = radius;
  79.                                 setAndGetradiusOfVertices(radius);
  80.                         }
  81.                 }
  82.                        
  83.         }
  84.        
  85.         void setAndGetradiusOfVertices(float radius2) {
  86.                 float angleRadians;
  87.                 degresInRadians = 2*pi/edges;
  88.                 Mesh mesh = gameObject.GetComponent<MeshFilter>().mesh;
  89.                 Vector3[] vertices = mesh.vertices;
  90.                 Vector2[] uv = mesh.uv;
  91.                 for(int index = 0; index < edges; ++index)
  92.                 {
  93.                         angleRadians = degresInRadians * index;
  94.                         vertices[index] = new Vector3(radius2 * Mathf.Cos(angleRadians),radius2 * Mathf.Sin(angleRadians),0);
  95.                         uv[index] = new Vector2(vertices[index].x,vertices[index].y);
  96.                         mesh.vertices = vertices;
  97.                         mesh.uv = uv;
  98.                 }
  99.         }
  100. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top