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:
Vector3 normal = Vector3.Cross(start, end);
Vector3 side = Vector3.Cross(normal, end-start);
side.Normalize();
Vector3 a = start + side * (lineWidth / 2);
Vector3 b = start + side * (lineWidth / -2);
Vector3 c = end + side * (lineWidth / 2);
Vector3 d = end + side * (lineWidth / -2);
Hier a
, b
, c
und d
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.