Il problema è sostanzialmente questo:
LineRenderer sta tentando di collegare le posizioni dei punti rossi. Sta creando i vertici verdi per creare una mesh. Quindi il segmento della linea superiore sembra fantastico. Ma poi il LineRenderer cerca di essere economico, riutilizza i vertici dalla fine di un segmento di linea alla fine del secondo segmento di linea. Quando c'è un angolo acuto, ottieni il problema che stai vedendo. Il segmento della seconda linea viene pizzicato all'intersezione perché il suo "cappuccio" non è perpendicolare con l'altro "tappo".
La soluzione è creare il tuo renderizzatore di linee e non renderlo così economico. Puoi farlo generando una mesh dinamica . La mesh sarà composta da una serie di quadratini sottili. Per ogni segmento di linea, è possibile calcolare i quattro angoli del quadrato calcolando la normale della linea e una larghezza della linea specificata:
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);
Qui, a
, b
, c
e d
costituiscono i quattro angoli di un singolo segmento di linea, proprio come i punti verdi nell'immagine qui sopra. Questi vertici verrebbero aggiunti alla mesh e aggiungerei anche gli indici per rendere i quattro vertici in due triangoli (quindi, verranno aggiunti sei indici, abc e bdc).
Questo può ovviamente diventare piuttosto complesso. Credo che un altro motivo per cui Unity abbia implementato il loro LineRenderer nel modo in cui lo hanno fatto sia perché farlo in questo modo evita un altro problema, gli angoli. Quando inizi a disegnare ogni segmento di linea, inizierai a vedere dove i due segmenti di linea si uniscono e formano una brutta giuntura. Esistono modi per affrontarlo calcolando la normale condivisa tra entrambe le linee e aggiornando i loro vertici alla normale condivisa, ma questo risolve solo parzialmente il problema, poiché puoi ancora facilmente finire con le linee pizzicate. La soluzione più robusta è quella di generare vertici aggiuntivi sui giunti per agire come angoli.