Làm thế nào tôi có thể vẽ một đường có độ dài và hướng nhất định?


7

Tôi muốn tạo một dòng có độ dài và hướng nhất định.

Ý tôi là điều này là vẽ một đường thẳng từ Điểm A đến Điểm B. Thông thường trong Unity C # để vẽ một đường thẳng từ Điểm A đến Điểm B chỉ đơn giản là:

Debug.DrawLine(point_A, point_B);

Sơ đồ sẽ là một cái gì đó như thế này

A----------------B

Nhưng tôi không muốn một cái gì đó như thế này, tôi muốn nó vẽ từ Điểm A đến Điểm B nhưng với một độ dài nhất định. Vì vậy, tôi đoán tôi cần hướng để làm việc này. Nhưng tôi không biết cách viết mã.

Đây là một sơ đồ cơ bản về cách tôi muốn nó.

A--------        B

Câu trả lời:


8

Bạn có thể chỉ cần lấy vectơ chỉ đúng hướng, sau đó chia tỷ lệ theo khoảng cách bạn muốn và thêm nó vào điểm ban đầu. Điều này sẽ xác định một điểm kết thúc mới cho dòng của bạn.

//Get the direction of the line
Vector3 direction = point_B - point_A;
//Get a new point at your distance from point A
Vector3 point_C = point_A + (direction.normalized * distance);
//Draw the line
Debug.DrawLine(point_A, point_C);

Câu trả lời là chính xác, ngoài một chi tiết nhỏ: chuẩn hóa không trả về một vectơ trong đơn vị c # vì vậy bạn phải gọi nó theo hướng trong một dòng mã bổ sung. Xem docs.unity3d.com/ScriptReference/Vector3.N normalize.html
Kronos

@Kronos Cảm ơn, tôi đã không xem tài liệu khi viết câu trả lời, điều tôi dự định là normalizedbiến. Mà về cơ bản trả về một bản sao chuẩn hóa.
MichaelHouse

2

Nếu bạn biết điểm bắt đầu và điểm kết thúc cũng như độ dài mong muốn, bạn có thể sử dụng Vector3.Lerp

Vector3 midPoint = Vector3.Lerp(startVector, endVector, 0.5f);

Debug.DrawLine(startVector, midPoint);

Điều này chỉ hoạt động nếu độ dài mong muốn là một số phần trăm đã biết của khoảng cách ban đầu. Vì vậy, mã phải bao gồm phép tính để xác định tỷ lệ độ dài (giữa gốc và mong muốn), vì op không nói rằng nó luôn luôn là một nửa.
MichaelHouse

Tôi đã không biết rằng Vector3.Lerp kẹp khoảng cách giữa 0,0 và 1,0. docs.unity3d.com/ScriptReference/Vector3.Lerp.html
CaptainRedmuff

1
Nó không chỉ bị kẹp, mà bạn phải tính toán nhiều hơn câu trả lời của bạn. Giả sử bạn muốn dòng của bạn dài 8 đơn vị. Trước tiên, bạn phải tính khoảng cách giữa hai điểm của mình, ví dụ như hóa ra là 10 đơn vị, sau đó bạn sẽ cung cấp phương pháp lerp với 8/10tỷ lệ của bạn để có được độ dài dòng bạn muốn. Câu trả lời của bạn ngay bây giờ chỉ cho phép các dòng dài hoặc ngắn hơn khoảng cách giữa hai điểm của bạn và nó giả định rằng khoảng cách đã được biết (bằng cách sử dụng .5trong lerp).
MichaelHouse
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.