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

  • 相关阅读:
    解决关于 在android studio 出现的 DELETE_FAILED_INTERNAL_ERROR Error while Installing APK 问题
    oracle 时间日期常用语句及函数
    微信小程序 网络请求之re.request 和那些坑
    微信小程序 网络请求之设置合法域名
    开发中常用js记录(三)
    oracle 锁表 and 解锁
    微信小程序 JS动态修改样式
    微信小程序 获得用户输入内容
    微信小程序 引用其他js里的方法
    微信JSAPI支付回调
  • 原文地址:https://www.cnblogs.com/leoin2012/p/6846999.html
Copyright © 2011-2022 走看看