Ich habe festgestellt, dass sich die Linie beim Hinzufügen weiterer Scheitelpunkte zu einer Linienrenderer-Linie verdreht und nicht mehr glatt ist.
.GIF Hier: http://i.imgur.com/hRAhCXM.gif
Alle Linien sind auf der gleichen z-Ebene, auch wenn ich die Materialien entferne, scheinen sich die Linien immer noch zu verdrehen.
Ich habe keine Ahnung, warum dies der Fall ist oder wie ich es lösen soll. Irgendwelche Vorschläge? C #
Antworten:
Das Problem ist im Grunde das:
Der LineRenderer versucht, die Positionen der roten Punkte zu verbinden. Es werden die grünen Eckpunkte erstellt, um ein Netz zu erstellen. Das Top-Line-Segment sieht also gut aus. Aber dann versucht der LineRenderer wirtschaftlich zu sein, er verwendet die Eckpunkte vom Ende eines Liniensegments am Ende des zweiten Liniensegments wieder. Wenn es einen scharfen Winkel gibt, bekommen Sie das Problem, das Sie sehen. Das zweite Liniensegment wird an der Kreuzung eingeklemmt, weil seine "Endkappe" nicht senkrecht zu seiner anderen "Endkappe" ist.
Die Lösung besteht darin, einen eigenen Linienrenderer zu erstellen und diesen nicht so wirtschaftlich zu gestalten. Sie können dies tun, indem Sie ein dynamisches Netz generieren . Das Netz besteht aus einer Reihe dünner Quads. Für jedes Liniensegment können Sie die vier Ecken des Quadrats berechnen, indem Sie die Normalen der Linie und eine bestimmte Linienbreite berechnen:
Hier
a
,b
,c
undd
die vier Ecken eines einzelnen Liniensegment bilden, ebenso wie die grünen Punkte im Bild oben. Diese Scheitelpunkte würden dem Netz hinzugefügt, und Sie würden auch die Indizes hinzufügen, um die vier Scheitelpunkte in zwei Dreiecke zu verwandeln (also würden sechs Indizes hinzugefügt, abc und bdc).Dies kann offensichtlich ziemlich komplex werden. Ich glaube, ein weiterer Grund, warum Unity ihren LineRenderer so implementiert hat, war, dass auf diese Weise ein weiteres Problem vermieden wird, nämlich Ecken. Wenn Sie mit dem Zeichnen jedes Liniensegments beginnen, sehen Sie, wo die beiden Liniensegmente zusammenkommen und eine hässliche Verbindung bilden. Es gibt Möglichkeiten, damit umzugehen, indem Sie die gemeinsame Normalen zwischen beiden Linien berechnen und ihre Scheitelpunkte auf die gemeinsame Normalen aktualisieren. Dies löst das Problem jedoch nur teilweise, da Sie immer noch leicht eingeklemmte Linien erhalten können. Die robusteste Lösung besteht darin, zusätzliche Eckpunkte an den Gelenken zu erzeugen, die als Ecken dienen.
quelle
Ich hatte das gleiche Problem und ich löse es, indem ich mehr Punkte zu glatten Kanten hinzufüge. Es ist keine elegante Lösung, aber es ist einfach und funktioniert. Zumindest für mich. Ich habe eine Funktion geschrieben, um dies zu tun:
quelle
Eine Möglichkeit, dies für undurchsichtige Linien zu lösen, besteht darin, an jeder Fuge einen Kreis zu rendern. Der Kreis muss einen Durchmesser haben, der der Linienbreite entspricht. Dies erfordert ein paar zusätzliche Eckpunkte zum Rendern, sieht aber wirklich gut aus. Sie können dann auch die gemeinsamen Normalen zwischen den Gelenken entfernen.
Dies erfordert weiterhin, dass Sie Ihren eigenen Rendering-Code schreiben, anstatt den Unity Line Renderer zu verwenden.
Ich habe unter http://u3d.as/nFE einen Vermögenswert erstellt, der genau dies tut
quelle
Ich habe dies vermieden, indem ich die z-Position in der LineRenderer.SetPosition () -Methode immer auf 0 gesetzt habe. Also anstatt zu schreiben
LineRenderer.SetPosition(i, myVector3);
Ich hab geschrieben
LineRenderer.SetPosition(i, new Vector3(myVector3.x, myVector3.y, 0));
Aber das ist nicht die beste Lösung, da Sie immer noch diese seltsamen Zeilen bekommen. Die beste Lösung, die ich mir vorstellen konnte, war das Erstellen separater Zeilen. Das hat bei mir perfekt funktioniert. Hoffe das hilft dir.
quelle