美文网首页Unity编辑器开发分享
PropertyDrawer 自定义属性绘图

PropertyDrawer 自定义属性绘图

作者: 循环渐进123456 | 来源:发表于2017-09-25 14:13 被阅读18次
    public class PlayerAttributeExample : MonoBehaviour
    {
        //无滑块的属性
        public int VIPLevel = 0;
    
        //特性限定,有滑块
        [Range(0, 10)]
        public int SliderVIPLevel = 0;
    }
    

    Range特性的方法实现:

    using UnityEngine;
    using System.Collections;
    
    //特性的定义要继承自PropertyAttribute
    public class MyRangeAttribute : PropertyAttribute
    {
        public float Min;//最小值
        public float Max;//最大值
    
        public MyRangeAttribute(float min, float max)
        {
            this.Min = min;
            this.Max = max;
        }
    }
    
    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    
    //继承PropertyDrawer, 必须放入Editor文件夹下
    [CustomPropertyDrawer(typeof(MyRangeAttribute))]
    public class MyRangeAttributeDrawer : PropertyDrawer
    {
        //重载OnGUI方法
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            MyRangeAttribute myRange = attribute as MyRangeAttribute;
    
            if (property.propertyType == SerializedPropertyType.Integer)
            {
                EditorGUI.IntSlider(position, property, (int)myRange.Min, (int)myRange.Max, label);
            }
            else if (property.propertyType == SerializedPropertyType.Float)
            {
                EditorGUI.Slider(position, property, myRange.Min, myRange.Max, label);
            }
            else
            {
    
            }
        }
    
    }
    

    2.绘制多选


     public enum SomeFood
        {
            汉堡 = 0,
            鸡肉卷 = 1,
            薯条 = 3,
        }
        //只能单选
        public SomeFood MyLoveFood;
    
        //多选特性
        [EnumListAttribute]
        public SomeFood MyLoveFoodList;
    
    using UnityEngine;
    using System.Collections;
    
    public class EnumListAttribute : PropertyAttribute
    {
    
    }
    
    using UnityEngine;
    using System.Collections;
    using UnityEditor;
    
    [CustomPropertyDrawer(typeof(EnumListAttribute))]
    public class EnumListAttributeDrawer : PropertyDrawer
    {
        public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
        {
            property.intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumNames);
        }
    }
    

    相关文章

      网友评论

        本文标题:PropertyDrawer 自定义属性绘图

        本文链接:https://www.haomeiwen.com/subject/fptdextx.html