【第三章自定义检视面板_创建自定义编辑器_如何创建自定义PropertyDrawer(9/9)】

3.2.3 如何创建自定义PropertyDrawer

上面二个unity给我们提供的,我们可以自定义Attrbute去实现自己想要的效果。这里举一个自定义PropertyDrawer的例子。假设我们有一个属性用于表示时间(以秒为单位)

三步走

1.定义特性类 (PropertyAttribute)

csharp 复制代码
using System;
using UnityEngine;

/*
 命名机制:
XXXAttribute 类 → [XXX] 标记
Unity 自动完成后缀匹配
 
 */
[AttributeUsage(AttributeTargets.Field)]
public class TimeAttribute : PropertyAttribute
{
    
}

2.创建 PropertyDrawer

csharp 复制代码
using UnityEditor;
using UnityEngine;
using System;

[CustomPropertyDrawer(typeof(TimeAttribute))]
public class TimePropertyDrawer : PropertyDrawer
{
    public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
    {
        if (property.propertyType == SerializedPropertyType.Float)
        {
            property.floatValue = EditorGUI.FloatField(new Rect(position.x, position.y, position.width * 0.6f, position.height), label, property.floatValue);
            EditorGUI.LabelField(new Rect(position.x + position.width * 0.6f, position.y, position.width * 0.4f, position.height), GetTimeFormat(property.floatValue));
        }
    }

    private string GetTimeFormat(float time)
    {
       //取整获得总共的秒数
       int l = Convert.ToInt32(time);
        //计算小时、分钟、秒
        int hour = l / 3600;
        int minute = (l % 3600) / 60;
        int second = l % 3600 %60;
        return string.Format("{0:D2}:{1:D2}:{2:D2}", hour, minute, second);
    }
}

3. 使用自定义 PropertyDrawer

csharp 复制代码
using UnityEngine;

public class PropertyDrawerExample : MonoBehaviour
{

    //时间字段(自定义特性),这里是为什么是Time,请看第一步
    [Time, SerializeField]
    private float duration = 596f;

    [Time, SerializeField]
    private int delay = 2;
}

效果图

实际上,书上在本小节还举了二个例子,一个是为 Unity 中的 Color 类型属性提供了​​增强版的 Inspector 界面​​,在保留标准颜色选择器的基础上,添加了十六进制颜色输入和透明度独立控制功能,另一个是为 Unity 中的 Sprite 类型属性提供了​​增强版的 Inspector 显示​​,在保留标准精灵选择功能的基础上,添加了大型预览图和精灵名称显示功能。

下面给出链接,有需要还可以看看

1.扩展Color
2.扩展Sprite
相关推荐
数字冰雹3 小时前
“图观”端渲染场景编辑器
人工智能·编辑器
云梦谭4 小时前
Cursor 编辑器:面向 AI 编程的新一代 IDE
ide·人工智能·编辑器
SmalBox5 小时前
【URP】Shader绘制棋盘格对比内置管线
unity·渲染
ONLYOFFICE18 小时前
【技术教程】如何将ONLYOFFICE文档集成到使用Spring Boot框架编写的Java Web应用程序中
java·spring boot·编辑器
Blue桃之夭夭1 天前
Visual Studio Code设置个性化背景教程
ide·vscode·编辑器
EQ-雪梨蛋花汤1 天前
【Unity笔记】Unity 编辑器扩展:打造一个可切换 Config.assets 的顶部菜单插件
unity·编辑器·游戏引擎
SmalBox1 天前
【URP】UnityHLSL顶点片元语义详解
unity·渲染
在路上看风景2 天前
9. Mono项目与Unity的关系
unity
在路上看风景2 天前
1.12 Memory Profiler Package - Summary
unity
byte轻骑兵2 天前
365 天技术创作手记:从一行代码到四万同行者的相遇
ide·vscode·编辑器