【Unity Sprite属性拓展】

发布于:2025-07-19 ⋅ 阅读:(14) ⋅ 点赞:(0)

Unity Inspector 精灵图预览

为 Unity 中的 Sprite 类型属性提供了​​增强版的 Inspector 显示​​,在保留标准精灵选择功能的基础上,添加了大型预览图和精灵名称显示功能


代码

using UnityEngine;
using UnityEditor;

// 1️⃣ 告诉 Unity:所有 Sprite 字段都用我来画
[CustomPropertyDrawer(typeof(Sprite))]
public class SpritePropertyDrawer : PropertyDrawer
{
    /* --------------------------------------------------
     * 1. 告诉 Unity 这一行有多高
     * -------------------------------------------------- */
    public override float GetPropertyHeight(
        SerializedProperty property, GUIContent label)
    {
        // 我们给 100*100 的预览 + 一点留白,共 110 像素
        return 110f;
    }

    /* --------------------------------------------------
     * 2. 真正绘制 GUI
     * -------------------------------------------------- */
    public override void OnGUI(Rect position,
        SerializedProperty property, GUIContent label)
    {
        // 让 Unity 帮我们处理 disable / prefab override
        label = EditorGUI.BeginProperty(position, label, property);

        // 画左侧字段名,并返回剩余矩形区域
        position = EditorGUI.PrefixLabel(position,
            GUIUtility.GetControlID(FocusType.Passive), label);

        /* ---------- 1. 100×100 预览图 ---------- */
        Rect previewRect = new Rect(
            position.x,
            position.y,
            100f,
            100f
        );

        // ObjectField 既能显示又能拖拽赋值
        EditorGUI.ObjectField(
            previewRect,
            property,
            typeof(Sprite),
            GUIContent.none   // 不显示额外文字
        );

        /* ---------- 2. 右侧显示精灵名称 ---------- */
        if (property.objectReferenceValue != null) // 有图才显示
        {
            Rect nameRect = new Rect(
                position.x + 105f,      // 贴在预览图右侧
                position.y + 35f,       // 垂直居中
                position.width - 105f,  // 占满剩余宽度
                position.height
            );

            // 直接取资源名称
            EditorGUI.LabelField(
                nameRect,
                property.objectReferenceValue.name
            );
        }

        EditorGUI.EndProperty(); // 收尾
    }
}

效果图

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到