Guest User

Untitled

a guest
Jun 18th, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEditor;
  5.  
  6. //NOTE
  7. //put in /Assets/Editor folder
  8.  
  9.  
  10. public class InvertedSphere : EditorWindow
  11. {
  12. private string st = "1.0";
  13.  
  14. [MenuItem("GameObject/Create Other/Inverted Sphere...")]
  15. public static void ShowWindow()
  16. {
  17. EditorWindow.GetWindow(typeof(InvertedSphere));
  18. }
  19.  
  20. public void OnGUI()
  21. {
  22. GUILayout.Label("Enter sphere size:");
  23. st = GUILayout.TextField(st);
  24.  
  25. float f;
  26. if (!float.TryParse(st, out f))
  27. f = 1.0f;
  28. if (GUILayout.Button("Create Inverted Sphere"))
  29. {
  30. CreateInvertedSphere(f);
  31. }
  32. }
  33.  
  34. private void CreateInvertedSphere(float size)
  35. {
  36. GameObject go = GameObject.CreatePrimitive(PrimitiveType.Sphere);
  37. MeshFilter mf = go.GetComponent<MeshFilter>();
  38. Mesh mesh = mf.sharedMesh;
  39.  
  40. GameObject goNew = new GameObject();
  41. goNew.name = "Inverted Sphere";
  42. MeshFilter mfNew = goNew.AddComponent<MeshFilter>();
  43. mfNew.sharedMesh = new Mesh();
  44.  
  45.  
  46. //Scale the vertices;
  47. Vector3[] vertices = mesh.vertices;
  48. for (int i = 0; i < vertices.Length; i++)
  49. vertices[i] = vertices[i] * size;
  50. mfNew.sharedMesh.vertices = vertices;
  51.  
  52. // Reverse the triangles
  53. int[] triangles = mesh.triangles;
  54. for (int i = 0; i < triangles.Length; i += 3)
  55. {
  56. int t = triangles[i];
  57. triangles[i] = triangles[i + 2];
  58. triangles[i + 2] = t;
  59. }
  60. mfNew.sharedMesh.triangles = triangles;
  61.  
  62. // Reverse the normals;
  63. Vector3[] normals = mesh.normals;
  64. for (int i = 0; i < normals.Length; i++)
  65. normals[i] = -normals[i];
  66. mfNew.sharedMesh.normals = normals;
  67.  
  68.  
  69. mfNew.sharedMesh.uv = mesh.uv;
  70. mfNew.sharedMesh.uv2 = mesh.uv2;
  71. mfNew.sharedMesh.RecalculateBounds();
  72.  
  73. // Add the same material that the original sphere used
  74. MeshRenderer mr = goNew.AddComponent<MeshRenderer>();
  75. Renderer gorenderer = go.GetComponent<Renderer>();
  76. //mr.sharedMaterial = go.renderer.sharedMaterial;
  77. mr.sharedMaterial = gorenderer.sharedMaterial;
  78.  
  79. DestroyImmediate(go);
  80. }
  81. }
Add Comment
Please, Sign In to add comment