zoukankan      html  css  js  c++  java
  • PropertyDrawer 自定义属性绘图

    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);
        }
    }
  • 相关阅读:
    Xcode界面切换动画效果
    Objective—C中的排序及Compare陷阱
    串行口应用
    在windows上搭建C语言开发环境——借助eclipse和MinGW
    Leetcode--Two Sum
    C++语言笔记系列之十六——赋值兼容规则&多继承的二义性
    在Powerdesigner中创建概念数据模型
    数据模型
    数据描述的三个领域
    开启PowerDesigner15工具栏上的被禁用掉的图标
  • 原文地址:https://www.cnblogs.com/martianzone/p/4867982.html
Copyright © 2011-2022 走看看