PropertyDrawer 自定义属性绘图

来源:互联网 发布:知乎 紫外线消毒 人体 编辑:程序博客网 时间:2024/05/16 07:05

转自:http://www.cnblogs.com/martianzone/p/4867982.html

复制代码
public class PlayerAttributeExample : MonoBehaviour{    //无滑块的属性    public int VIPLevel = 0;    //特性限定,有滑块    [Range(0, 10)]    public int SliderVIPLevel = 0;}
复制代码

 

Range特性的方法实现:

复制代码
using UnityEngine;using System.Collections;//特性的定义要继承自PropertyAttributepublic 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);    }}

复制代码


0 0
原创粉丝点击