2017-01-12 2 views
0

Я хочу ограничить длину строки max в текстовой области в моем пользовательском инспекторе. Я попытался сделать код, как показано ниже:Как ограничить длину строки в текстовой области? [Editor Scripting]

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); 
    } 
} 

ответ

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); 

EDIT:

Редактирование кода к этому:

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), 
    }); 

Если сделать трюк.

+0

благодарит за ответ. Я изменил свой код, как вы предлагали, но все же это не сработало. Вот код: http://pastebin.com/n54XNKwQ –

+0

@AliAkbar отредактировал ваш pastebin: [http://pastebin.com/Uu8C9bTQ](http://pastebin.com/Uu8C9bTQ) –

+0

спасибо, что сработало! но проблема в том, что последние 3 символа будут удалены только в том случае, если я нажимаю где-то вне области текста: | –

Смежные вопросы