この記事でのバージョン
Unity 2018.4.1f1
はじめに
Unityでは選択しているオブジェクトの内容がInspectorに表示されますが、
このInspectorで前表示していたやつを表示するショートカット
つまり、戻ると進む機能があったら便利かもな〜と思って実際に作って見ました!
イメージとしては以下のような感じ。
なお、作ってから気付いたのですが、
同様の目的(おそらくもっと高機能?)のアセットがあるようです(未確認)。
History Inspector - Asset Store |
SelectedObjectRecorder
早速、HierarchyやProjectで選択していたObjectを記録し、Inspectorの戻ると進む機能を追加する
SelectedObjectRecorderのコードです。
使い方は簡単、SelectedObjectRecorderをEditorフォルダに作成したら、
でoption+command+bで戻る、option+command+aで進むが実行出来るようになります。
また、Tools/Selected Object Recorder/Open Windowでウィンドウが開き、
このウィンドウで選択したオブジェクトの履歴を確認する事も可能ですし、
ボタンを押すことでオブジェクトを選択する事も出来ます。
なお、選択したオブジェクトの履歴を削除する機能も付いています。
ちなみにシーンを再生したり、Unityを再起動したり、
プログラムが変更されてコンパイルが走ったりしても履歴は消えません。
また、履歴にあるオブジェクトを消しても、履歴が消えるだけでエラーは出ませんし、
シーンを切り替えても元のシーンにあったオブジェクトが履歴から消えるだけです。
プログラム解説
詳細な解説は省きますが、一応SelectedObjectRecorderの要所についてだけ解説していきます。
まずSelectionクラスを使い、現在選択しているオブジェクトを取得したり、
選択したオブジェクトが変わった時のイベントを取得したりしています。
//選択しているオブジェクトが変わった時のイベントにメソッド登録
Selection.selectionChanged += OnChangedSelection;
また、Objectをそのまま利用すると、シーンを再生した時や
プログラムが変更されてコンパイルが走った時に参照がなくなって履歴が消えてしまうので、
InstanceIDをEditorUserSettingsで保存して使っています。
//選択したオブジェクトのIDを取得 int id = Selection.activeObject.GetInstanceID();
//履歴の数を保存 EditorUserSettings.SetConfigValue (SELECTION_OBJECT_COUNT_SAVE_KEY, _selectedObjectIDs.Count.ToString()); //選択していたオブジェクトのIDを保存 for (int i = 0; i < _selectedObjectIDs.Count; i++) { EditorUserSettings.SetConfigValue (SELECTION_OBJECT_SAVE_KEY + i, _selectedObjectIDs[i].ToString()); }
なお、ショートカットの設定はMenuItemを使って行っています。
プログラムを直接書き換えてショートカットを変更する事も、もちろん可能ですが、
Shortcut Managerで変更する事も出来ます。