Guest User

Untitled

a guest
Feb 18th, 2018
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. [ExecuteInEditMode]
  6. public class TubeTrail : MonoBehaviour
  7. {
  8. public int sections = 16;
  9. public float radius = 0.5f;
  10. public int columns = 8;
  11. public float distance = 0.01f;
  12. public List<Vector3> verts = new List<Vector3> ();
  13. public List<Vector3> normals = new List<Vector3> ();
  14. public List<int> tris = new List<int> ();
  15.  
  16. List<Vector3> points;
  17. MeshFilter filter;
  18.  
  19. void OnEnable ()
  20. {
  21. Setup ();
  22. }
  23.  
  24. void Setup ()
  25. {
  26. //if (verts.Count == 0)
  27. CreateMesh ();
  28.  
  29. if (points == null) {
  30. points = new List<Vector3> ();
  31. for (int i = 0; i < sections; ++i)
  32. points.Add (Vector3.zero);
  33. }
  34.  
  35. filter = GetComponent<MeshFilter> ();
  36.  
  37. UploadVBO ();
  38. }
  39.  
  40.  
  41. void CreateMesh ()
  42. {
  43. if (sections < 2)
  44. sections = 2;
  45.  
  46. if (columns < 4)
  47. columns = 4;
  48.  
  49. verts.Clear ();
  50. normals.Clear ();
  51. for (int i = 0; i < sections; ++i) {
  52. for (float j = 0; j < columns; ++j) {
  53. verts.Add (new Vector3 (Mathf.Sin (Mathf.PI * 2 * j / columns) * radius, Mathf.Cos (Mathf.PI * 2 * j / columns) * radius, i * distance));
  54. normals.Add (new Vector3 (Mathf.Sin (Mathf.PI * 2 * j / columns), Mathf.Cos (Mathf.PI * 2 * j / columns), 0).normalized);
  55. }
  56. }
  57.  
  58. if (tris.Count != sections * columns * 12) {
  59. Debug.Log ("Tris " + tris.Count + " != " + ((sections - 1) * columns * 12));
  60. tris.Clear ();
  61.  
  62. for (int i = 0; i < sections; ++i) {
  63. int index = i * columns;
  64. int nextI = (i + 1) * columns;
  65. if ((i + 1) >= sections)
  66. nextI = index; //Dont overshoot...
  67.  
  68. for (int j = 0; j < columns; ++j) {
  69. tris.Add (index + j);
  70. tris.Add (nextI + j);
  71. tris.Add (index + ((j + 1) % columns));
  72.  
  73. tris.Add (index + ((j + 1) % columns));
  74. tris.Add (nextI + j);
  75. tris.Add (nextI + ((j + 1) % columns));
  76.  
  77. //Double sided
  78. tris.Add (index + j);
  79. tris.Add (index + ((j + 1) % columns));
  80. tris.Add (nextI + j);
  81.  
  82. tris.Add (index + ((j + 1) % columns));
  83. tris.Add (nextI + ((j + 1) % columns));
  84. tris.Add (nextI + j);
  85. }
  86. }
  87. }
  88. }
  89.  
  90. void UploadVBO ()
  91. {
  92. if (filter.sharedMesh == null)
  93. filter.sharedMesh = new Mesh ();
  94.  
  95. filter.sharedMesh.SetVertices (verts);
  96. filter.sharedMesh.SetTriangles (tris, 0, true);
  97. //filter.sharedMesh.RecalculateNormals ();
  98. filter.sharedMesh.SetNormals (normals);
  99.  
  100. filter.sharedMesh.UploadMeshData (false); //set to true?
  101. }
  102.  
  103.  
  104. void Update ()
  105. {
  106. //Setup ();
  107. }
  108. }
Add Comment
Please, Sign In to add comment