2017-08-16 2 views
1

Ich arbeite zur Zeit ein Mapping-Tool, das eine benutzerdefinierte Karte für mein Spiel generieren. Ich habe die Netzgenerierung bekam perfekt funktioniert, aber ich kann nicht herausfinden zu sehen, wie man richtig UV meine Gesichter Karte die Texturen im Einklang zu erhalten. Ich habe die UV-Karte bekommt auf dem Boden gut funktionierend nur durch den Einsatz der jeweilige Paar koordinieren, aber die Wände scheinen nicht das gleiche zu arbeiten.Was ist der richtige Weg zur UV-Karte eine Mauer?

Kennt jemand den richtigen Weg, um eine UV-Karte an einer senkrechten Wand abzubilden?

Hier sind einige Beispiele meiner aktuellen Wände: enter image description here enter image description here

Ich verwende dies derzeit für das UV-Mapping der Wand

 currentMesh.uvs.Add(new Vector2(0, 0)); 
     currentMesh.uvs.Add(new Vector2(1, 0)); 
     currentMesh.uvs.Add(new Vector2(0, 1)); 
     currentMesh.uvs.Add(new Vector2(1, 1)); 

Antwort

1

Ich habe auf Figur verwaltet:
enter image description here

ich das von hier gelernt habe es aus. dabei nahm die X und Z des Scheitels und nehmen das Gewicht der beiden in Abhängigkeit von der Richtung der Wand Was ich am Ende und es endete mit den Ergebnissen wollte ich

 Vector3 heading = new Vector3(floor2.x - floor1.x, 0, floor2.z - floor1.z); 
     Vector3 direction = heading/heading.magnitude; 

     currentMesh.uvs.Add(new Vector2(((floor1.x * direction.x) + (floor1.z * direction.z))/scale, floor1.y/scale)); 
     currentMesh.uvs.Add(new Vector2(((floor2.x * direction.x) + (floor2.z * direction.z))/scale, floor2.y/scale)); 
     currentMesh.uvs.Add(new Vector2(((ceil1.x * direction.x) + (ceil1.z * direction.z))/scale, ceil1.y/scale)); 
     currentMesh.uvs.Add(new Vector2(((ceil2.x * direction.x) + (ceil2.z * direction.z))/scale, ceil2.y/scale)); 

enter image description here

1

Für Situationen wie diese, ich Führen Sie die folgenden Schritte aus:
1. Stellen Sie die Textur ein Quadrat ein (für die Berechnung im Code unten zu reduzieren). Machen Sie es auch nahtlos und den Umbruchmodus zu wiederholen.

Length = (float)Vector3.Distance(mesh.vertices [0],mesh.vertices [1]) 
Width = (float)Vector3.Distance(mesh.vertices [0],mesh.vertices [3]) 

3.Then I UV-Karte mit diesem Code:
2. Die Länge und Breite des Rechtecks ​​wie diese finden Sie

Vector2[] uv = new Vector2[mesh.vertices.Length]; 
    float min = Length>Width?Length:Width; 
    for (int i = 0, y = 0; i < uv.Length; i++){ 
     uv [i] = new Vector2 ((float)mesh.vertices [i].z/min, (float)mesh.vertices [i].y/min);  
    } 

Hier nahm ich .z und .y, als mein Flugzeug in yz-Ebene ist. Was dieser Code tut, ist, dass er den kleineren Arm des Rechtecks ​​findet und an die Textur angepasst wird.
Hier ist ein Screenshot von dem Ergebnis: enter image description here

Hier ist die Textur, die ich verwendet:
http://catlikecoding.com/unity/tutorials/procedural-grid/

Verwandte Themen