zoukankan      html  css  js  c++  java
  • Unity Editor 扩展PropertyDrawer (属性的 Inspector )

    using UnityEngine;
    
    [System.Serializable]
    public struct RangeFloat {
    
        public float min;
        public float max;
    
        public RangeFloat (float minValue, float maxValue) {
            min = minValue;
            max = maxValue;
        }
    
        public float Lerp (float t) {
            return Mathf.Lerp(min, max, t);
        }
    }
    

    以下代码放置在名为 Editor 的文件夹下

    #pragma warning disable 0649
    
    using UnityEditor;
    using UnityEngine;
    
    [CustomPropertyDrawer(typeof(RangeFloat))]
    public class RangeFloatDrawer : PropertyDrawer {
    
        public override void OnGUI (Rect position, SerializedProperty property, GUIContent label) {
            // 只能在 position 指定的范围内绘制
            EditorGUI.BeginProperty(position, label, property);
            {
                float x, w;
                int elementCount = 3;
                for (int i = 0; i < elementCount; i++) {
                    w = position.width / elementCount;
                    x = position.x + w * i;
                    switch (i) {
                        case 0:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.LabelField(new Rect(x, position.y, w, position.height), property.displayName);
                            break;
                        case 1:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("min"));
                            break;
                        case 2:
                            EditorGUIUtility.labelWidth = 25;
                            EditorGUI.PropertyField(new Rect(x, position.y, w, position.height), property.FindPropertyRelative("max"));
                            break;
                    }
                }
            }
            EditorGUI.EndProperty();
            EditorGUIUtility.labelWidth = 0; // 将其设置为 0 会重置为默认值
        }
    
    }
    
  • 相关阅读:
    学期总结
    C语言I博客作业09
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    作业02
    c语言 学习笔记之二 选择题2
  • 原文地址:https://www.cnblogs.com/kingBook/p/15331723.html
Copyright © 2011-2022 走看看