Problem polega w zasadzie na tym:
LineRenderer próbuje połączyć pozycje z czerwoną kropką. Tworzy zielone wierzchołki, aby utworzyć siatkę. Tak więc segment górnej linii wygląda świetnie. Ale potem LineRenderer stara się być ekonomiczny, ponownie wykorzystuje wierzchołki od końca jednego segmentu linii na końcu drugiego segmentu linii. Gdy jest ostry kąt, pojawia się problem, który widzisz. Drugi segment linii jest ściśnięty na przecięciu, ponieważ jego „zaślepka” nie jest prostopadła do drugiego „zaślepki”.
Rozwiązaniem jest stworzenie własnego renderera linii, a nie uczynienie go tak ekonomicznym. Możesz to zrobić, generując dynamiczną siatkę . Siatka będzie się składać z szeregu cienkich quadów. Dla każdego segmentu linii można obliczyć cztery rogi kwadratu, obliczając normalną linię i określoną szerokość linii:
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);
Tutaj a
, b
, c
i d
tworzą cztery narożniki jednego segmentu linii, podobnie jak zielone kropki na obrazie powyżej. Te wierzchołki zostaną dodane do siatki, a także dodasz indeksy, aby przekształcić cztery wierzchołki w dwa trójkąty (a więc dodanych zostanie sześć indeksów, abc i bdc).
Może to oczywiście stać się dość skomplikowane. Uważam, że innym powodem, dla którego Unity zaimplementowało swój LineRenderer, było to, że w ten sposób unika się innego problemu, narożników. Kiedy zaczniesz rysować każdy segment linii, zaczniesz widzieć, gdzie dwa segmenty linii łączą się i tworzą brzydkie połączenie. Istnieją sposoby, aby sobie z tym poradzić, obliczając wspólną normalną między obiema liniami i aktualizując ich wierzchołki do wspólnej normalnej, ale to tylko częściowo rozwiązuje problem, ponieważ nadal możesz łatwo skończyć z zaciśniętymi liniami. Najbardziej niezawodnym rozwiązaniem jest wygenerowanie dodatkowych wierzchołków w stawach, które będą działać jako narożniki.