TextFieldをクリアしたい
UnityEditorを使っていて、TextFieldやTextAreaに入力された値をクリアしたい場合があります。
ところが、素直に下記のように書いてもクリアできず、テキストが残ったままとなります。
string textFieldValue ="";
void OnGUI()
{
textFieldValue = EditorGUILayout.TextField(textFieldValue);
if(GUILayout.Button("クリア"))
{
textFieldValue = "";
}
}
これは、Editorでは、フォーカスが当たっているコントロールは、一度フォーカスを外さないと更新されないためとなります。なので、選択されて色が青くなっているSelectableLabelなどでも同様の現象が発生します。
対処方法
フォーカスを別のコントロールに当ててあげれば変更されます。今回はTextAreaからButtonにフォーカスを変更します。
string textFieldValue ="";
void OnGUI()
{
textFieldValue = EditorGUILayout.TextField(textFieldValue);
//次のコントロールに名前をつける
GUI.SetNextControlName("ClearButton");
if(GUILayout.Button("クリア"))
{
textFieldValue = "";
//名前をつけたコントロールにフォーカスを当てる
GUI.FocusControl("ClearButton");
}
}
GUI.SetNextControllNameでコントロールに名前をつけて、GUI.Focusでフォーカスを移動しています。
ただ、これだとボタンが反転した状態になるので、気になる場合は別のコントロールを作成してそこにフォーカスを当てるなどしてみてください。
以上です!