シーンをいろいろできる拡張機能を作った
プロジェクト内のシーンファイルを自動取得・一覧表示し、いろいろできる拡張機能を作ったので紹介します。
SceneManageWindowの紹介
シーンの一覧表示・ロード
プロジェクト内の全てのシーンを自動で取得し、一覧表示します。
一覧には親ディレクトリごとに分けて表示されます。
シーン名右側の"Load"ボタンを押すと、そのシーンをロードすることができます。
開始シーンの設定
"Start"トグルをonにすると、シーン名欄が桃色で表示され、開始シーンに設定されます。
開始シーンが設定されている場合、実行時にそのシーンから開始します。*1
on状態の"Start"トグルをもう一度押すと、未設定にすることができます。
シーンの作成・複製
また、シーン名左側の四角をクリックすることで対象のシーンを選択できます。
1つのシーンを選択した状態でシーン名を入力し、"Deplicate Scene"ボタンを押すと、指定先に選択シーンを複製します。
同様に、1つのシーンを選択した状態で"Remove Scene"ボタンを押すとシーンの削除、シーン名を入力して"Rename Scene"ボタンを押すとシーン名の変更ができます。
シーングループの作成・編集
複数のシーンを選択し、グループ名を入力後、"Create SceneGroup"ボタンを押すと、シーングループを作成します。
これにより、シーンをグループ化する事ができます。
シーングループのシーンの追加・削除も可能です。
マルチシーンの作成・編集
複数のシーンを選択し、マルチシーンの名前を入力後、"Create MultiScene"ボタンを押すと、最初に選択したシーンをメインシーンとしてマルチシーンを作成します。
マルチシーン名右側の"Load"ボタンを押すと、最初に選択したシーンをOpenSceneMode.Singleでロードした後、その他のシーンをOpenSceneMode.Additiveでロードします。
マルチシーンのシーンの追加・削除も可能です。
ビルドに含むシーンの簡易設定・編集
シーン名を右側の"NonBuild"と書かれたトグルを押すと"Build"となり、ビルド対象のシーンに設定できます。
もう一度押すとビルド対象から外れます。
また、"Scenes In Build"のリストはBuild Settingのものと同様に、並び替える事でシーンのIndexを変更する事ができます。
導入方法
1.ここからパッケージをダウンロード
2.パッケージをインポート
3.Window -> SceneManageWindow から開く
以上です。
補足・注意点
・作成時のUnityのバージョンは2017.2.0f3です。
2017では実行開始時のシーンを設定するUnityEditor.SceneManagement.EditorSceneManager.playModeStartSceneというものがあったので使ってみました。
そのため、2017より前のバージョンではStartトグルは表示されません。
▼公式リファレンス
Unity - Scripting API: SceneManagement.EditorSceneManager.playModeStartScene
・保持する必要がある情報はjsonに変換し、EditorUserSettingを使って保存しています。
このEditorUserSettingで保存したデータはLibraryディレクトリ内にあるので、バージョン管理でLibraryディレクトリを含んでいないが設定を共有したい場合、データの保存方法を見直す必要があるかと思います。
▼EditorUserSettingについて
プロジェクト内でデータを保存【Unity】【エディタ拡張】 - (:3[kanのメモ帳]
・シーンの作成先はすでにシーンファイルが存在するディレクトリの候補から選択するようにしています。
Assets下の全ディレクトリを候補とすると、大規模なプロジェクトだと多すぎて使いづらいし、小規模ならそこまでしなくてもいいかと思ったためです。
シーンファイルの存在しないディレクトリは候補に表示されないため、Projectビューで直接シーンを作成してください。
(中途半端感が否めないので、何かいい案があれば教えてください…)
▼一応、Assets下の全ディレクトリのパスを取得する方法
string[] allDirectories = System.IO.Directory.GetDirectories( UnityEngine.Application.dataPath, "*", System.IO.SearchOption.AllDirectories );
最後に
今回はシーン関連の効率化のための拡張機能を作りました。
大規模なプロジェクトほど、役に立つかと思います。
「それいる?」みたいな機能が多いかもですが、個人的には気に入ってます。
また、初めてのエディタ拡張だったのもあり、つまづいた点が幾つかありました。
それについては、また別の記事にまとめる予定です。
20171113追記:書きました
20171117追記:プロジェクト内にSceneAssetが存在しない際に表示が崩れるバグを修正しました
*1:Unity2017のみの機能です。