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

  • 相关阅读:
    Git 基础
    SharePoint 2013 对象模型操作"网站设置"菜单
    SharePoint 2013 隐藏部分Ribbon菜单
    SharePoint 2013 Designer系列之数据视图筛选
    SharePoint 2013 Designer系列之数据视图
    SharePoint 2013 Designer系列之自定义列表表单
    SharePoint 2013 设置自定义布局页
    SharePoint 2013 "通知我"功能简介
    SharePoint 2013 创建web应用程序报错"This page can’t be displayed"
    SharePoint 禁用本地回环的两个方法
  • 原文地址:https://www.cnblogs.com/leoin2012/p/6846999.html
Copyright © 2011-2022 走看看