如何限制文本区域的字符串长度? [编辑脚本]

时间:2017-01-12 10:38:50

标签: c# unity3d

我想在自定义检查器中限制文本区域中的字符串最大长度。我试图编写如下代码:

if(EditorGUI.EndChangeCheck()){
        if(_dTarget.mazeNumData.Length >= 338){
            _dTarget.mazeNumData.Remove((_dTarget.mazeNumData.Length - 1) - 3, 3);
        }
}

但它没有用。我的代码有什么问题吗?

我的完整代码:

using UnityEngine;
using UnityEditor;
using System.Collections;

[CustomEditor(typeof(DigitTotal))]
public class DigitTotalEditor : Editor {

    private DigitTotal _dTarget;

    public override void OnInspectorGUI() {
        _dTarget = (DigitTotal)target;

        DrawDefaultInspector();
        DrawCustomInspector();
    }

    void DrawCustomInspector() {
        GUIStyle guiStyle = EditorStyles.textArea;
        guiStyle.wordWrap = true;

        EditorGUI.BeginChangeCheck();

        _dTarget.mazeNumData = EditorGUILayout.TextArea(_dTarget.mazeNumData, guiStyle, new GUILayoutOption[] 
        { 
            GUILayout.Height(100f),
            GUILayout.Width(250f),
        });

        if(EditorGUI.EndChangeCheck()){
            if(_dTarget.mazeNumData.Length >= 338){
                _dTarget.mazeNumData.Remove((_dTarget.mazeNumData.Length - 1) - 3, 3);
            }
        }

        GUILayout.Space(5f);
        GUILayout.Label("Digits : " + _dTarget.mazeNumData.Length, EditorStyles.boldLabel);
    }
}

1 个答案:

答案 0 :(得分:0)

定义一些恒定长度:

const int MAX_LEN = 1337;

为输入定义一些占位符:

string inputString = string.Empty;

在打印之前的OnGUI()方法中(将字符串分配给GUI元素)执行以下操作:

//.. in OnGui before printing the text
if(inputString.Length > MAX_LEN)
    inputString = inputString.Substring(0, MAX_LEN - 1);

修改

编辑代码:

if(dTarget.mazeNumData.Length > MAX_LEN)
    _dTarget.mazeNumData = _dTarget.mazeNumData.Substring(0, MAX_LEN - 1); 

_dTarget.mazeNumData = EditorGUILayout.TextArea(_dTarget.mazeNumData, guiStyle, new GUILayoutOption[] 
    { 
        GUILayout.Height(100f),
        GUILayout.Width(250f),
    });

应该做的伎俩。