• 让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的大小英文)了

  • 相关阅读:
    去掉谷歌浏览器下input框自动填充的背景色
    ajax请求中动态显示问题
    Array对象的方法有
    请求页面的方法
    IE浏览器checkbox的样式问题
    property、classmethod和staticmethod总结
    面向对象和类
    内置函数补充map、reduce和filter等
    python实现控制台的进度条功能
    python常见内置函数
  • 原文地址:https://www.cnblogs.com/leoin2012/p/6846999.html
Copyright © 2020-2023  润新知