太郎Work

Unityとかで困ったこと等を残しておきます

拡張EditorでTextFieldの表示を更新する

拡張Editorを使っているとよく起きる問題。

TextFieldの文字を選択中にその中身を書き換えても文字列が更新されない(内部的には更新されている)

f:id:tarowork:20131007174507p:plain

このように上のTextFieldを選択した状態で上のTextFieldを消すと本当は”TEST2”と表示されるはずが、 ”TEST”が残ったままになる。 実際には”TEST2”が代入されているので問題はないが、他のエリアをクリックしない限り更新されないのですごく紛らわしい。

今までは気にしないようにしていたが、調べたら出てきたのでここに書いておく

http://answers.unity3d.com/questions/180659/editorgui-refresh.html

キーボードコントロールIDを初期化してフォーカスを外す感じ?

GUIUtility.keyboardControl = 0;

値を削除するタイミング等でこの一文を入れておけば想定した挙動になる。

あとこんな使い方もできた

string s = EditorGUILayout.TextField(text);
if(s != text) {
    GUIUtility.keyboardControl = 0;
}

文字を打とうとするとフォーカスが外れるので、条件による選択フィールドっぽくも出来る。

UnityEditor奥が深い・・・