Sorun temel olarak şudur:
LineRenderer kırmızı nokta konumlarını bağlamaya çalışıyor. Bir kafes yapmak için yeşil köşeler yaratıyor. Böylece en üst segment harika görünüyor. Ama sonra LineRenderer ekonomik olmaya çalışır, ikinci çizgi segmentinin sonunda bir çizgi parçasının sonundaki köşeleri yeniden kullanır. Keskin bir açı olduğunda, gördüğünüz sorunu alırsınız. İkinci çizgi parçası kesişme noktasında sıkışır, çünkü 'uç kapağı' diğer 'uç başlığı' ile dik değildir.
Çözüm, kendi çizgi oluşturucunuzu oluşturmak ve bu kadar ekonomik hale getirmemek. Bunu dinamik bir kafes oluşturarak yapabilirsiniz . Ağ, bir dizi ince dörtlüden oluşacaktır. Her bir çizgi parçası için, çizginin normalini ve belirtilen bir çizgi genişliğini hesaplayarak dörtlüün dört köşesini hesaplayabilirsiniz:
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);
Burada a
, b
, c
ve d
sadece yukarıdaki resimde yeşil noktalar gibi, tek bir doğru parçasının dört köşesine oluşturuyor. Bu köşeler ağa eklenir ve ayrıca dört köşeyi iki üçgene yapmak için endeksleri de eklersiniz (yani, altı indeks eklenir, abc ve bdc).
Bu açıkça karmaşık olabilir. Unity'nin Unline'ın LineRenderer'ını yaptıkları gibi uygulamasının başka bir nedeni olduğuna inanıyorum çünkü bunu yapmak başka bir problemden, köşelerden kaçınıyor. Her çizgi parçasını çizmeye başladığınızda, iki çizgi parçasının nerede bir araya geldiğini ve çirkin bir bağlantı oluşturduğunu görmeye başlarsınız. Bununla, her iki satır arasındaki paylaşılan normali hesaplayıp köşelerini paylaşılan normal ile güncelleyerek bununla başa çıkmanın yolları vardır, ancak bu, sıkışan çizgilerle kolayca sonuçlanabildiğiniz için sorunu sadece kısmen çözer. En sağlam çözüm, köşe olarak hareket etmek için eklemlerde ek köşeler oluşturmaktır.