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

EditorToolAttribute

класс в UnityEditor.EditorTools

Наследуется от:EditorTools.ToolAttribute

Описание

Зарегистрирует EditorTool в качестве глобального инструмента или инструмента Component для определенного типа цели.

Глобальный инструмент работает на любом выборе. Глобальный инструмент также всегда доступен с верхней панели инструментов. Инструмент Компонент, например CustomEditor, доступен только для выборов, соответствующих типу объекта.

using System.Collections.Generic;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.Rendering;

public static class Drawing
{
    public static void DrawPoints(Transform transform, IList<Vector3> positions, Color color, float size)
    {
        if (positions == null || !positions.Any())
            return;

        var matrix = transform.localToWorldMatrix;
        DrawHandleCaps(matrix, positions, color * .3f, size, CompareFunction.Greater);
        DrawHandleCaps(matrix, positions, color, size, CompareFunction.LessEqual);
    }

    public static void DrawHandleCaps(Matrix4x4 transform, IList<Vector3> positions, Color color, float size, CompareFunction compare)
    {
        if (Event.current.type != EventType.Repaint)
            return;

        var camera = Camera.current;

        Vector3 sideways = (camera == null ? Vector3.right : camera.transform.right);
        Vector3 up = (camera == null ? Vector3.up : camera.transform.up);

        var prevColor = Handles.color;
        Handles.color = color;

        var prevCompare = Handles.zTest;
        Handles.zTest = compare;
        var world = transform.MultiplyPoint3x4(positions[0]);

        // DotHandleCap call sets up the material and GL state, so just re-use it to avoid expensive setup for each quad
        // Done this way because HandleUtility.ApplyWireMaterial is private
        Handles.DotHandleCap(0, world, Quaternion.identity, HandleUtility.GetHandleSize(world) * size, EventType.Repaint);
        GL.Begin(GL.QUADS);

        foreach (var p in positions)
        {
            var position = transform.MultiplyPoint(p);
            var handleSize = HandleUtility.GetHandleSize(position) * size;

            GL.Color(color);
            GL.Vertex(position + (sideways + up) * handleSize);
            GL.Vertex(position + (sideways - up) * handleSize);
            GL.Vertex(position - (sideways + up) * handleSize);
            GL.Vertex(position - (sideways - up) * handleSize);
        }

        GL.End();
        Handles.color = prevColor;
        Handles.zTest = prevCompare;
    }
}

Вы также можете использовать варианты инструментов, чтобы сгруппировать похожие инструменты в одну кнопку в накладке Инструменты. См. ToolAttribute.variantGroup.

using System;
using UnityEditor;
using UnityEditor.EditorTools;
using UnityEngine;

namespace GlobalToolVariants
{
    // Define 3 tools that should be shown as a single button in the Tools Overlay.
    struct ShapeVariantGroup {}

    [EditorTool("Line (Custom Global)", variantGroup = typeof(ShapeVariantGroup), variantPriority = 2)]
    [Icon("Assets/Examples/Icons/Variant-Line.png")]
    class Line : EditorTool {}

    [EditorTool("Circle (Custom Global)", variantGroup = typeof(ShapeVariantGroup), variantPriority = 1)]
    [Icon("Assets/Examples/Icons/Variant-Circle.png")]
    class Circle : EditorTool {}

    [EditorTool("Square (Custom Global)", variantGroup = typeof(ShapeVariantGroup), variantPriority = 0)]
    [Icon("Assets/Examples/Icons/Variant-Square.png")]
    class Square : EditorTool {}
}

Конструкторы

Конструктор Описание
EditorToolAttributeЗарегистрирует EditorTool как глобальный инструмент или инструмент CustomEditor.
Унаследованные члены 2

Статические свойства

СвойствоОписание
defaultPriorityЗначение по умолчанию для ToolAttribute.toolPriority и ToolAttribute.variantPriority. Укажите приоритет ниже этого значения, чтобы отобразить инструмент перед записями по умолчанию, или укажите более высокое значение, чтобы отобразить его после записей по умолчанию.

Свойства

СвойствоОписание
allowPersistentTargetsПозволяет инструменту нацеливаться на постоянные объекты. Это совместимо только с ScriptableObjects. При разработке инструментов, нацеленных на постоянные объекты, информируйте пользователей о том, редактируют ли они в сцене или постоянный объект.
displayNameИмя, которое отображается в меню.
groupГруппы инструментов помещают логически схожие инструменты под одним заголовком в Накладке инструментов.
targetContextЕсли указано, то EditorTool будет доступен только тогда, когда ToolManager.activeContextType равен targetContext.
targetTypeУстанавливает тип инструмента, который может быть изменён этим EditorTool или EditorToolContext. Устанавливает null, если инструмент не специфичен для Компонента и должен быть доступен в любое время.
toolPriorityПриоритет инструмента определяет порядок, в котором инструменты отображаются в перекрытии инструментов.
variantGroupВарианты инструментов используются для группировки логически схожих инструментов в одну кнопку в накладке Инструменты.
variantPriorityВариант приоритета определяет порядок, в котором инструменты отображаются, когда они отображаются в раскрывающемся списке ToolAttribute.variantGroup.