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

  • 相关阅读:
    VMware centos7 网络设置
    PostgreSQL 执行进度监控:VACUUM 、ANALYZE、CREATE INDEX 、CLUSTER、Base Backup
    PostgreSQL: Hash Semi Join
    事务隔离级别实验--SQL在等待锁结束之后,是否会再次获取快照
    转:PostgreSQL WAL解析与闪回的一些想法
    PostgreSQL Event trigger 使用记录:阻断危险SQL、记录DDL操作
    转:PgSQL · 特性分析 · Write-Ahead Logging机制浅析
    mongo使用问题记录
    goldplayer h265播放器
    在线书籍
  • 原文地址:https://www.cnblogs.com/leoin2012/p/6846999.html
Copyright © 2011-2022 走看看