あるサイトを参考にして、メッシュで立方体を作成しました。書かれている通りにやったので、作成することは出来たのですが、スクリプトでよく分からない部分があります。教えていただけるとありがたいです。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MeshingProc : MonoBehaviour { 6 7 private Mesh mesh; 8 private new MeshRenderer renderer; 9 private new MeshCollider collider; 10 public int vertexCount = 0; //頂点の数 11 private List<int> newTriangles = new List<int>(); //三角形 12 private List<Vector3> newVertex = new List<Vector3>(); //頂点 13 private List<Vector3> newNormarls = new List<Vector3>(); //法線 14 private int[] windingOrder = new int[3] { 2, 1, 0 }; //三角巻き取り 15 private Vector3[] square = new Vector3[5]; 16 17 // Use this for initialization 18 void Start () { 19 mesh = gameObject.GetComponent<MeshFilter>().mesh; 20 renderer = gameObject.GetComponent<MeshRenderer>(); 21 collider = gameObject.GetComponent<MeshCollider>(); 22 GetVertices(); 23 MakeMesh(); 24 } 25 26 void revertOrder() 27 { 28 int i = windingOrder[0]; 29 windingOrder[0] = windingOrder[2]; 30 windingOrder[2] = i; 31 } 32 33 void GetVertices() 34 { 35 XSquare(Vector3.zero, Vector3.left); 36 XSquare(Vector3.right, Vector3.right); 37 YSquare(Vector3.zero, Vector3.down); 38 YSquare(Vector3.up, Vector3.up); 39 ZSquare(Vector3.zero, Vector3.back); 40 ZSquare(Vector3.forward, Vector3.forward); 41 } 42 43 void MakeMesh() 44 { 45 mesh.Clear(); 46 47 mesh.vertices = newVertex.ToArray(); 48 mesh.triangles = newTriangles.ToArray(); 49 mesh.normals = newNormarls.ToArray(); 50 renderer.material = new Material(Shader.Find("Diffuse")); 51 52 collider.sharedMesh = null; 53 collider.sharedMesh = mesh; 54 } 55 56 void XSquare(Vector3 startPos,Vector3 normal) 57 { 58 square[0] = startPos; 59 square[1] = startPos + Vector3.forward; 60 square[2] = startPos + Vector3.up; 61 square[3] = startPos + Vector3.forward + Vector3.up; 62 square[4] = normal; 63 64 AddSquare(); 65 } 66 67 void YSquare(Vector3 startPos, Vector3 normal) 68 { 69 square[0] = startPos; 70 square[1] = startPos + Vector3.right; 71 square[2] = startPos + Vector3.forward; 72 square[3] = startPos + Vector3.right + Vector3.forward; 73 square[4] = normal; 74 75 AddSquare(); 76 } 77 78 void ZSquare(Vector3 startPos, Vector3 normal) 79 { 80 square[0] = startPos; 81 square[1] = startPos + Vector3.right; 82 square[2] = startPos + Vector3.up; 83 square[3] = startPos + Vector3.right + Vector3.up; 84 square[4] = normal; 85 86 AddSquare(); 87 } 88 89 90 void AddSquare() 91 { 92 // Order in wich windingOrder is inverted 93 if (square[4].x > 0 || square[4].y > 0 || square[4].z < 0) 94 { 95 for (int j = 0; j < 2; j++) 96 { 97 for (int i = 0; i < 3; i++) 98 { 99 newVertex.Add(square[i + j]); 100 newTriangles.Add(vertexCount + windingOrder[i]); 101 newNormarls.Add(square[4]); 102 } 103 104 vertexCount += 3; 105 106 revertOrder(); 107 } 108 } 109 else 110 { 111 for (int j = 0; j < 2; j++) 112 { 113 revertOrder(); 114 115 for (int i = 0; i < 3; i++) 116 { 117 newVertex.Add(square[i + j]); 118 newTriangles.Add(vertexCount + windingOrder[i]); 119 newNormarls.Add(square[4]); 120 } 121 122 vertexCount += 3; 123 } 124 } 125 } 126} 127
void AddSquare()の部分が、なにをしているのかよく分かりませんでした。
normalというのは法線のことだと思うのですが、法線にも座標があるのでしょうか?調べたのですが、説明するサイトが出て来ませんでした。
windingOrderは恐らく三角巻き取りだと思い、コメントを書いたのですが、正確にそうなのかは分かりません。
回答よろしくお願いします。
参考にしたサイト↓
http://www.voxelab.fr/en/2015/09/maillage-procedural-dans-unity/
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/01/15 04:49