Le problème est essentiellement le suivant:
Le LineRenderer essaie de connecter les positions des points rouges. Il crée les sommets verts pour faire un maillage. Ainsi, le segment de première ligne est superbe. Mais alors le LineRenderer essaie d'être économique, il réutilise les sommets de la fin d'un segment de ligne à la fin du deuxième segment de ligne. Quand il y a un angle aigu, vous obtenez le problème que vous voyez. Le deuxième segment de ligne est pincé à l'intersection car son «capuchon d'extrémité» n'est pas perpendiculaire à son autre «capuchon d'extrémité».
La solution est de créer votre propre rendu de ligne et de ne pas le rendre aussi économique. Vous pouvez le faire en générant un maillage dynamique . Le maillage sera composé d'une série de quadruples fins. Pour chaque segment de ligne, vous pouvez calculer les quatre coins du quad en calculant la normale de la ligne et une largeur de ligne spécifiée:
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);
Ici, a
, b
, c
et d
constituent les quatre coins d'un seul segment de ligne, tout comme les points verts dans l'image ci - dessus. Ces sommets seraient ajoutés au maillage, et vous ajouteriez également les indices pour transformer les quatre sommets en deux triangles (donc, six indices seraient ajoutés, abc et bdc).
Cela peut évidemment devenir assez complexe. Je crois qu'une autre raison pour laquelle Unity a implémenté leur LineRenderer comme ils l'ont fait est que le faire de cette façon évite un autre problème, les virages. Lorsque vous commencez à dessiner chaque segment de ligne, vous commencez à voir où les deux segments de ligne se rejoignent et forment une laideur. Il existe des moyens de résoudre ce problème en calculant la normale partagée entre les deux lignes et en mettant à jour leurs sommets vers la normale partagée, mais cela ne résout que partiellement le problème, car vous pouvez toujours vous retrouver facilement avec des lignes pincées. La solution la plus robuste consiste à générer des sommets supplémentaires au niveau des joints pour servir de coins.