ปัญหานี้เป็นพื้น:
LineRenderer พยายามเชื่อมต่อตำแหน่งจุดสีแดง มันกำลังสร้างจุดยอดสีเขียวเพื่อทำตาข่าย ดังนั้นกลุ่มบรรทัดบนสุดจึงดูดี แต่แล้ว LineRenderer พยายามประหยัดมันจะนำจุดยอดกลับมาจากจุดสิ้นสุดของส่วนของบรรทัดหนึ่งในส่วนท้ายของส่วนของบรรทัดที่สอง เมื่อมีมุมที่คมชัดคุณจะพบปัญหาที่คุณเห็น ส่วนของบรรทัดที่สองถูกบีบที่จุดตัดเนื่องจาก 'ฝาท้าย' ไม่ได้ตั้งฉากกับส่วนปลายอื่น ๆ
วิธีแก้ปัญหาคือการสร้างตัวแสดงผลบรรทัดของคุณเองและไม่ทำให้ประหยัด คุณสามารถทำได้โดยการสร้างแบบไดนามิกตาข่าย ตาข่ายจะประกอบด้วยชุดของสี่คนบางล่าม สำหรับแต่ละส่วนของเส้นคุณสามารถคำนวณสี่มุมของรูปสี่เหลี่ยมโดยคำนวณตามปกติของบรรทัดและความกว้างของบรรทัดที่ระบุ:
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);
ที่นี่a
, b
, c
และd
ทำขึ้นสี่มุมของส่วนของเส้นเดียวเช่นเดียวกับจุดสีเขียวในภาพดังกล่าวข้างต้น จุดยอดเหล่านี้จะถูกเพิ่มเข้าไปในตาข่ายและคุณยังเพิ่มดัชนีเพื่อทำให้จุดยอดสี่จุดเป็นสองสามเหลี่ยม
เห็นได้ชัดว่ามันค่อนข้างซับซ้อน ฉันเชื่อว่าอีกเหตุผลหนึ่งที่ Unity ใช้ LineRenderer ของพวกเขาในแบบที่พวกเขาทำเพราะทำเช่นนั้นเพื่อหลีกเลี่ยงปัญหาอื่นมุม เมื่อคุณเริ่มวาดแต่ละส่วนของเส้นคุณจะเริ่มเห็นว่าส่วนของสองบรรทัดนั้นมารวมกันและรวมกันเป็นรูปน่าเกลียด มีวิธีจัดการกับสิ่งนี้โดยการคำนวณปกติที่ใช้ร่วมกันระหว่างทั้งสองบรรทัดและอัปเดตจุดยอดของพวกเขาเป็นปกติที่ใช้ร่วมกัน แต่นี่เป็นเพียงการแก้ปัญหาเพียงบางส่วนเนื่องจากคุณยังสามารถจบลงด้วยเส้น pinched ทางออกที่แข็งแกร่งที่สุดคือการสร้างจุดยอดเพิ่มเติมที่ข้อต่อเพื่อทำหน้าที่เป็นมุม