SceneManageWindow作成で気づいたこと&参考にした資料

初めてのUnityエディタ拡張の上で気づいたこと&SceneManageWindow作成の上で参考にした資料をまとめておきます。

 

 

気づいたこと

TextFieldの文字列が消えない

"TextFieldに文字を入力し、Buttonを押したら入力文字列をリセット"

っていうよく使いそうな処理をしたら奇妙な現象が起こりました。

f:id:sonoichi-60:20171113184807g:plain

TextFieldから文字が消えない…

上のウィンドウでは以下のような処理をしてます。

_text = EditorGUILayout.TextField( _text, EditorStyles.textField );
if( GUILayout.Button( "Log" ) ) {
    Debug.Log( _text );
    _text = "";
}

問題なのは、「TextFieldで入力された文字列は(内部でstringの値が変更されても)フォーカスされている間保持される」という点です。

つまり、適当なタイミングでTextFieldのフォーカスを外せばいいということでした。

以下のような処理でフォーカスを外すことができます。

GUI.FocusControll("");

GUIのフォーカスを外す - けいごのなんとか

 

 画面上のマウス座標の取得

パスを表示するポップアップを作る際、右クリックメニューのようにクリックした点にポップアップを出したかったので、画面上のマウス座標を取得する必要がありました。

まず、Unityでのゲーム制作でよく使われるInput.mousePositionですが、これはエディタ実行時にはGameViewを基準としたマウス座標を返し、非実行時には(0,0,0)を返すので使えず。

調べると、Event.current.mousePositionという、いかにもな値があったのですが、これは処理を記述したエディターウィンドウのGUI上のマウス座標みたいです。

Unity - スクリプトリファレンス: Event

画面上のマウス座標は以下のように取得しました。

var mouseGUIPos = Event.current.mousePosition;
var mouseScreenPos = EditorGUIUtility.GUIToScreenPoint( mouseGUIPos );

 

他、参考にした資料 

▼エディタ拡張入門

はじめに - エディター拡張入門

【エディタ拡張徹底解説】初級編①:ウィンドウを自作してみよう【Unity】 – ケットシーウェア

▼シーンの作成・削除・複製・名前変更

第26章 AssetDatabase - エディター拡張入門

Unity - マニュアル: AssetDatabase

▼開始シーンの設定

エディタ上で再生を開始するSceneを固定する【Unity】【エディタ拡張】 - (:3[kanのメモ帳]

 ▼マルチシーンを開く

楽にシーンを開く拡張機能を作ってみた(マルチシーン対応)【Unity】【エディタ拡張】 - (:3[kanのメモ帳]

▼ScenesInBuildの並び替え可能なリスト

第14章 ReorderbleList - エディター拡張入門

▼データ保存関連

第3章 データの保存 - エディター拡張入門

JsonUtility をつかって Unity で JSON を取り扱う方法 - Qiita

▼Path関連処理(ディレクトリ名の取得、使用不可文字の取得など)

Path クラス (System.IO)

▼シーン一覧の折りたたみ

Unity のエディタ拡張で FoldOut をかっこよくするのをやってみた - 凹みTips

▼仕切り線

エディタ拡張で仕切り線を描く - Qiita

▼ビルトインのGUIStyleを見る

Show Built In Resources - Unify Community Wiki

 

最後に

前回の記事のPV数が思ってたより伸びてて、いそいそしてます。

これからもぼちぼち更新していくのでよろしくお願いします。