zoukankan      html  css  js  c++  java
  • 让Unity的Inspector面板支持字符限制(restrict)功能

    今天在优化红点组件,笔者打算将红点id由10进制改为16进制处理,就打算将红点id字段由uint类型改成string类型,用于填写16进制的字符(因为在Inspector面板里,uint/int类型字段不能直接填写16进制表示的数字),且希望限制该字段的输入限制,仅限于填写0-9A-Fa-f等16进制字符串,但unity并没有提供任何PropertyAttribute类来限制字符输入,达到类似于as3 text组件的restrict效果。因此笔者自定义了一个RestrictAttribute类,用于实现字符限制效果。

        /* ==============================================================================
         * 功能描述:限制string字段的输入类型
         * 创 建 者:shuchangliu
         * ==============================================================================*/
    
        using System.Text.RegularExpressions;
        using UnityEngine;
        #if UNITY_EDITOR
        using UnityEditor;
        #endif
    
        public class RestrictAttribute : PropertyAttribute
        {
            public string restrict;
        	// Use this for initialization
            public RestrictAttribute(string restrict)
            {
                this.restrict = restrict;
            }
        }
    
        #if UNITY_EDITOR
        [CustomPropertyDrawer(typeof(RestrictAttribute))]
        public class RestrictDrawer : PropertyDrawer
        {
            public override float GetPropertyHeight(SerializedProperty property,
                                                    GUIContent label)
            {
                return EditorGUI.GetPropertyHeight(property, label, true);
            }
    
            public override void OnGUI(Rect position,
                                       SerializedProperty property,
                                       GUIContent label)
            {
                RestrictAttribute a = attribute as RestrictAttribute;
    
                EditorGUI.PropertyField(position, property, label, true);
                string v = property.stringValue;
                v = Regex.Replace(v, @"[^" + a.restrict + "]*", "");
                property.stringValue = v;
            }
    
        }
        #endif
    

        public class Test : MonoBehaviour
        {
            [Restrict("0-9a-fA-F")]
            public string pid;
        }
    

    在字段前加上[Restrict(string str)]参数,pid就只可以输入16进制数字(0-9及a-f的大小英文)了

  • 相关阅读:
    告别alert,拥抱console
    LeetCode之Max Points on a Line Total
    LeetCode之Maximum Product Subarray
    LeetCode之Reverse Words in a String
    LeetCode之Min Stack
    MySQL之系系统信息函数
    MySQL之日期时间函数
    MysqL之数值函数
    XML文件解析之JDOM解析
    XML文件解析之DOM4J解析
  • 原文地址:https://www.cnblogs.com/leoin2012/p/6846999.html
Copyright © 2011-2022 走看看