SceneManageWindow作成で気づいたこと&参考にした資料
初めてのUnityエディタ拡張の上で気づいたこと&SceneManageWindow作成の上で参考にした資料をまとめておきます。
気づいたこと
TextFieldの文字列が消えない
"TextFieldに文字を入力し、Buttonを押したら入力文字列をリセット"
っていうよく使いそうな処理をしたら奇妙な現象が起こりました。
TextFieldから文字が消えない…
上のウィンドウでは以下のような処理をしてます。
_text = EditorGUILayout.TextField( _text, EditorStyles.textField );
if( GUILayout.Button( "Log" ) ) {
Debug.Log( _text );
_text = "";
}
問題なのは、「TextFieldで入力された文字列は(内部でstringの値が変更されても)フォーカスされている間保持される」という点です。
つまり、適当なタイミングでTextFieldのフォーカスを外せばいいということでした。
以下のような処理でフォーカスを外すことができます。
GUI.FocusControll("");
画面上のマウス座標の取得
パスを表示するポップアップを作る際、右クリックメニューのようにクリックした点にポップアップを出したかったので、画面上のマウス座標を取得する必要がありました。
まず、Unityでのゲーム制作でよく使われるInput.mousePositionですが、これはエディタ実行時にはGameViewを基準としたマウス座標を返し、非実行時には(0,0,0)を返すので使えず。
調べると、Event.current.mousePositionという、いかにもな値があったのですが、これは処理を記述したエディターウィンドウのGUI上のマウス座標みたいです。
画面上のマウス座標は以下のように取得しました。
var mouseGUIPos = Event.current.mousePosition;
var mouseScreenPos = EditorGUIUtility.GUIToScreenPoint( mouseGUIPos );
他、参考にした資料
▼エディタ拡張入門
【エディタ拡張徹底解説】初級編①:ウィンドウを自作してみよう【Unity】 – ケットシーウェア
▼シーンの作成・削除・複製・名前変更
第26章 AssetDatabase - エディター拡張入門
▼開始シーンの設定
エディタ上で再生を開始するSceneを固定する【Unity】【エディタ拡張】 - (:3[kanのメモ帳]
▼マルチシーンを開く
楽にシーンを開く拡張機能を作ってみた(マルチシーン対応)【Unity】【エディタ拡張】 - (:3[kanのメモ帳]
▼ScenesInBuildの並び替え可能なリスト
第14章 ReorderbleList - エディター拡張入門
▼データ保存関連
JsonUtility をつかって Unity で JSON を取り扱う方法 - Qiita
▼Path関連処理(ディレクトリ名の取得、使用不可文字の取得など)
▼シーン一覧の折りたたみ
Unity のエディタ拡張で FoldOut をかっこよくするのをやってみた - 凹みTips
▼仕切り線
▼ビルトインのGUIStyleを見る
Show Built In Resources - Unify Community Wiki
最後に
前回の記事のPV数が思ってたより伸びてて、いそいそしてます。
これからもぼちぼち更新していくのでよろしくお願いします。