Unity 6.3
0 онлайн 58 гостей 3 в системе
Вход

Handles.DrawAAPolyLine

Declaration

public static void DrawAAPolyLine(Color[] colors, Vector3[] points);
public static void DrawAAPolyLine(float width, Color[] colors, Vector3[] points);
public static void DrawAAPolyLine(params Vector3[] points);
public static void DrawAAPolyLine(float width, params Vector3[] points);
public static void DrawAAPolyLine(Texture2D lineTex, params Vector3[] points);
public static void DrawAAPolyLine(float width, int actualNumberOfPoints, params Vector3[] points);
public static void DrawAAPolyLine(Texture2D lineTex, float width, params Vector3[] points);

Параметры

Параметр Описание
lineTex Текстура AA, используемая для рендеринга.
ширина Ширина линии.
пункты Список точек, из которых будет построена линия.
цвета Цвета, применяемые к каждой точке. Должно соответствовать длине массива точек или actualNumberOfPoints, в зависимости от того, что меньше и больше нуля.
actualNumberOfPoints Общее число вершин для рисования массива точек. Используйте это для сохранения многоразового буфера значений точек без необходимости частого изменения размера.

Описание

Рисовать линию с выравниванием, указанную с массивом точек и шириной.

Примечание: Используйте HandleUtility.GetHandleSize там, где вы хотите иметь постоянные ручки размера экрана.

Примечание: Чтобы получить эффект сглаживания, используйте текстуру размером 1x2 пикселей с одним прозрачным белым пикселем и одним непрозрачным белым пикселем.

using UnityEditor;
using UnityEngine;

public class ArrowDrawer : MonoBehaviour
{
    public void DrawArrow(Color color, float arrowThickness, float lineThickness, float shorten, Vector3 start, Vector3 end)
    {
        var length = (end - start).magnitude;
        if (length < 0.001f)
            return;

        var forward = (end - start) / length;
        var right = Vector3.Cross(Vector3.up, forward).normalized;

        var width = arrowThickness * 0.5f;
        var height = arrowThickness * 0.7f;

        start += forward * shorten;
        end -= forward * shorten;

        var arrowHead = new Vector3[3]
        {
            end,
            end - forward * height + right * width,
            end - forward * height - right * width
        };

        var arrowLine = new Vector3[2]
        {
            start,
            end - forward * height
        };

        Handles.color = color;
        Handles.DrawAAPolyLine(lineThickness, 2, arrowLine);
        Handles.DrawAAConvexPolygon(arrowHead);
    }

    void OnDrawGizmos()
    {
        DrawArrow(Color.white, 1f, 3f, 0f, transform.position, transform.position + transform.TransformDirection(Vector3.forward) * 4f);
    }
}