Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

DecoratorDrawer

класс в UnityEditor / Наследует от: GUIDrawer

Описание

Базовый класс, из которого создаются настраиваемые ящики декоратора.

DecoratorDrawer похож на PropertyDrawer, за исключением того, что он рисует не свойство, а декоративные элементы исключительно на основе данных, которые он получает от соответствующего Атрибут свойства.

Unity использует встроенные DecoratorDrawers для SpaceAttribute и HeaderAttribute. Вы также можете создать свои собственные DecoratorDrawers с соответствующими атрибутами PropertyAttributes.

Хотя концептуально DecoratorDrawer не предназначен для связи с конкретным полем, его атрибут все же необходимо разместить над полем в скрипте. Однако, в отличие от атрибутов PropertyDrawer, над одним и тем же полем может быть несколько атрибутов DecoratorDrawers. Кроме того, в отличие от PropertyDrawers, если атрибут DecoratorDrawer размещен над полем, которое является списком или массивом, декоратор будет отображаться только один раз перед массивом; не для каждого элемента массива.

Нижеприведенный пример состоит из двух скриптов.

Первый скрипт определяет атрибут примера под названием "ColorSpacer", а затем определяет DecoratorDrawer, который определяет, как он должен отображаться в инспекторе.

Второй скрипт представляет собой пример MonoBehaviour, который использует атрибут ColorSpacer для визуального разделения двух групп общедоступных свойств в инспекторе.

// Name this script "ColorSpacerExample"

using UnityEngine; using System.Collections; using UnityEditor;

// This class defines the ColorSpacer attribute, so that // it can be used in your regular MonoBehaviour scripts:

public class ColorSpacer : PropertyAttribute { public float spaceHeight; public float lineHeight; public float lineWidth; public Color lineColor = Color.red;

public ColorSpacer(float spaceHeight, float lineHeight, float lineWidth, float r, float g, float b) { this.spaceHeight = spaceHeight; this.lineHeight = lineHeight; this.lineWidth = lineWidth;

// unfortunately we can't pass a color through as a Color object // so we pass as 3 floats and make the object here this.lineColor = new Color(r, g, b); } }

// This defines how the ColorSpacer should be drawn // in the inspector, when inspecting a GameObject with // a MonoBehaviour which uses the ColorSpacer attribute

[CustomPropertyDrawer(typeof(ColorSpacer))] public class ColorSpacerDrawer : DecoratorDrawer { ColorSpacer colorSpacer { get { return ((ColorSpacer)attribute); } }

public override float GetHeight() { return base.GetHeight() + colorSpacer.spaceHeight; }

public override void OnGUI(Rect position) { // calculate the rect values for where to draw the line in the inspector float lineX = (position.x + (position.width / 2)) - colorSpacer.lineWidth / 2; float lineY = position.y + (colorSpacer.spaceHeight / 2); float lineWidth = colorSpacer.lineWidth; float lineHeight = colorSpacer.lineHeight;

// Draw the line in the calculated place in the inspector // (using the built in white pixel texture, tinted with GUI.color) Color oldGuiColor = GUI.color; GUI.color = colorSpacer.lineColor; EditorGUI.DrawPreviewTexture(new Rect(lineX, lineY, lineWidth, lineHeight), Texture2D.whiteTexture); GUI.color = oldGuiColor; } }

И этот второй скрипт использует атрибут ColorSpace, определенный выше:

using UnityEngine; using System.Collections;

public class ShowDecoratorDrawerExample : MonoBehaviour { public int a = 1; public int b = 2; public int c = 3;

// this shows our custom Decorator Drawer between the groups of properties [ColorSpacer(30, 3, 100, 1, 0, 0)]

public string d = "d"; public string e = "e"; public string f = "f"; }

Свойства

attribute PropertyAttribute для декоратора. (Только чтение)

Публичные Методы

CanCacheInspectorGUI Переопределите этот метод, чтобы определить, можно ли кэшировать графический интерфейс инспектора для вашего декоратора.
GetHeight Переопределите этот метод, чтобы указать высоту графического интерфейса для этого декоратора в пикселях.
OnGUI Переопределите этот метод, чтобы создать собственный графический интерфейс для декоратора. См. DecoratorDrawer для примера того, как это использовать.

Inherited Members

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3