2016-05-01 33 views
0

J'ai fait un mesh personnalisé dans le code (mais cela semble se produire sur tout GameObject que je fais) et quand je l'affiche en jeu ou en l'éditeur va faire disparaître certains visages pour que je puisse le voir plus clairement. Je pourrais comprendre comment cela serait utile, mais c'est plutôt agaçant non seulement pour le gameplay mais aussi pour travailler sur le projet. Il y a probablement une boîte que je dois décocher, mais je ne sais pas ce que c'est. J'ai inclus quelques captures d'écran (la première est en jeu et la seconde est dans l'éditeur, le maillage doit être en forme de pyramide complète). Ma maille pour un cube a 12 triangles, 8 sommets, et aucun uv où le maillage par défaut a 24 sommets, 12 triangles, et uv et uv2, juste pour référence.L'unité ne rend pas certaines parties de ma maille pour essayer de rendre d'autres parties visibles

Screenshot in gameIn editor

Voici mes réglages de l'appareil: Camera Settings

[EDIT] Non! J'avais tort! Il fonctionne parfaitement bien avec la valeur par défaut cube et d'autres objets par défaut

Ici, il est: Regular cube

Mais avec mon cube: Nope

Voici le code je:

 if (GameObject.Find ("Hopefully a Cube") == null) { 

      GameObject cube = new GameObject ("Hopefully a Cube"); 
      Mesh mesh = new Mesh(); 

      Vector3[] verticies = new Vector3[8]; 
      verticies [0] = new Vector3 (0, 0, 0); 
      verticies [1] = new Vector3 (100, 0, 0); 
      verticies [2] = new Vector3 (0, 100, 0); 
      verticies [3] = new Vector3 (100, 100, 0); 

      verticies [4] = new Vector3 (0, 0, 100); 
      verticies [5] = new Vector3 (100, 0, 100); 
      verticies [6] = new Vector3 (0, 100, 100); 
      verticies [7] = new Vector3 (100, 100, 100); 

      mesh.vertices = verticies; 

      int[] tris = new int[36]; 
      tris = new[] { 0, 2, 1, 2, 3, 1, 4, 2, 0, 6, 2, 4, 4, 6, 5, 6, 7, 5, 1, 3, 5, 3, 7, 5, 0, 4, 1, 4, 5, 1, 2, 6, 3, 6, 7, 3 }; 
      mesh.triangles = tris; 

      mesh.RecalculateNormals(); 

      MeshFilter meshFilter = cube.AddComponent<MeshFilter>(); 
      meshFilter.mesh = mesh; 

      MeshRenderer meshRenderer = cube.AddComponent<MeshRenderer>(); 
      Texture2D texture = new Texture2D (1, 1); 
      texture.SetPixels (new[] { Color.blue }); 
      meshRenderer.sharedMaterial = new Material (meshShader); 
      meshRenderer.sharedMaterial.mainTexture = texture; 

      cube.SetActive (true); 

     } 

     if (GameObject.Find ("Hopefully a Pyramid") == null) { 

      GameObject pyramid = new GameObject ("Hopefully a Pyramid"); 
      Mesh mesh = new Mesh(); 

      Vector3[] verticies = new Vector3[5]; 
      verticies [0] = new Vector3 (0, 0, 0); 
      verticies [1] = new Vector3 (100, 0, 0); 
      verticies [2] = new Vector3 (0, 0, 100); 
      verticies [3] = new Vector3 (100, 0, 100); 
      verticies [4] = new Vector3 (50, 100, 50); 

      mesh.vertices = verticies; 

      int[] tris = new int[18]; 
      tris = new[] { 0, 2, 1, 2, 3, 1, 0, 4, 1, 2, 4, 0, 3, 4, 2, 3, 4, 1 }; 

      mesh.triangles = tris; 

      mesh.RecalculateNormals(); 

      MeshFilter meshFilter = pyramid.AddComponent<MeshFilter>(); 
      meshFilter.mesh = mesh; 

      MeshRenderer meshRenderer = pyramid.AddComponent<MeshRenderer>(); 
      Texture2D texture = new Texture2D (1, 1); 
      texture.SetPixels (new[] { Color.blue }); 
      meshRenderer.sharedMaterial = new Material (meshShader); 
      meshRenderer.sharedMaterial.mainTexture = texture; 

      pyramid.SetActive (true); 

     } 
+0

im un 99% sûr qu'il a à voir avec l'ordre de liquidation. l'effet que vous voyez le plus probable n'est pas "ainsi vous pouvez le voir plus clairement", c'est parce que les indices (ou comme l'unité l'appelle triangles, pourquoi jamais, sont dans le mauvais ordre). veuillez poster le code que vous utilisez pour générer le cube. – yes

+0

J'ai ajouté le code que j'ai utilisé. – dsiegler19

+0

@ dsiegler19 a ajouté la réponse et une courte explication. veuillez le cocher comme correct. – yes

Répondre

4

Les index (les entiers du tableau triangulaire) de votre maillage sont dans un mauvais ordre. Ils doivent être dans le sens des aiguilles d'une montre à partir de la direction que vous regardez sur le visage. Une astuce simple, si elles apparaissent wong, suffit de retourner 2 indices du triangle en question.

Ceci est votre cube.

tris = new[] { 
    0, 2, 1, 2, 3, 1, 
    4, 2, 0, 6, 2, 4, 
    4, 5, 6, 6, 5, 7, 
    1, 3, 5, 3, 7, 5, 
    0, 1, 4, 4, 1, 5, 
    2, 6, 3, 6, 7, 3 
}; 

Si vous vous demandez pourquoi il a un tel ombrage étrange, puis créer un cube de 24 sommets et voir la différence. C'est parce que les normales sur le visage dépendent des normales des sommets qui le composent. (même chose pour les couleurs de vertex et uvs). Donc, si vous voulez des arêtes vives, des couleurs différentes des sommets des faces adjacentes ou une couture UV, vous aurez besoin de sommets individuels pour les faces/arêtes (donc 2 verts en un point), puisque vous ne pouvez définir ces vertices.

+1

Oh d'accord. Donc, puisque certains des triangles n'étaient pas ordonnés dans le sens des aiguilles d'une montre, ils n'étaient pas correctement rendus. Merci! – dsiegler19