版本:Unity 6 (6000.0)
语言英语
  • C#

DecoratorDrawer

UnityEditor 中的类

/

继承自:GUIDrawer

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读用户提出的每项修改建议,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的修改建议无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

派生自定义装饰器绘制器的基类。

DecoratorDrawer 类似于 PropertyDrawer,但它不绘制属性,而是根据其对应 PropertyAttribute 获取的数据绘制装饰元素。

Unity 使用内置的 DecoratorDrawer 来处理 SpaceAttributeHeaderAttribute。您还可以创建自己的 DecoratorDrawer,并与匹配的 PropertyAttribute 配合使用。

虽然从概念上讲,DecoratorDrawer 不应与特定字段相关联,但其属性仍然需要放置在脚本中的字段上方。但是,与 PropertyDrawer 属性不同,可以在同一字段上方放置多个 DecoratorDrawers 属性。此外,与 PropertyDrawer 不同,如果在 List 或数组字段上方放置 DecoratorDrawer 属性,则装饰器只会显示在数组之前一次;而不是每个数组元素都显示。

注意:如果需要您的装饰器绘制器执行清理任务,例如从编辑器事件中分离自身,则可以实现 IDisposable 接口。此接口允许您定义一个将在编辑器销毁时调用的方法,从而为您提供处理任何必要清理操作的机会。

以下示例包含在两个脚本中。

第一个脚本定义了一个名为“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 EditorGUI.DrawRect(new Rect(lineX, lineY, lineWidth, lineHeight), colorSpacer.lineColor); } }

第二个脚本是使用上面定义的 ColorSpacer 属性的脚本。

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"; }

属性

属性装饰器的 PropertyAttribute。(只读)

公共方法

CreatePropertyGUI重写此方法以根据 UIElements 为属性创建自己的 GUI。
GetHeight重写此方法以指定此装饰器的 GUI 高度(以像素为单位)。
OnGUI重写此方法以创建装饰器的自定义 GUI。请参阅 DecoratorDrawer,了解如何使用此方法的示例。

继承成员