シーンをいろいろできる拡張機能を作った

プロジェクト内のシーンファイルを自動取得・一覧表示し、いろいろできる拡張機能を作ったので紹介します。

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

 

 

SceneManageWindowの紹介

シーンの一覧表示・ロード 

プロジェクト内の全てのシーンを自動で取得し、一覧表示します。

一覧には親ディレクトリごとに分けて表示されます。

シーン名右側の"Load"ボタンを押すと、そのシーンをロードすることができます。

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

開始シーンの設定 

"Start"トグルをonにすると、シーン名欄が桃色で表示され、開始シーンに設定されます。

開始シーンが設定されている場合、実行時にそのシーンから開始します。*1

on状態の"Start"トグルをもう一度押すと、未設定にすることができます。

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

シーンの作成・複製

"Directory"ボタンを押し、表示されるパスから作成先を選択できます。
シーン名を入力し、"Create Scene"ボタンを押すと、指定先にデフォルトシーンを作成します。

また、シーン名左側の四角をクリックすることで対象のシーンを選択できます。

1つのシーンを選択した状態でシーン名を入力し、"Deplicate Scene"ボタンを押すと、指定先に選択シーンを複製します。

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

同様に、1つのシーンを選択した状態で"Remove Scene"ボタンを押すとシーンの削除、シーン名を入力して"Rename Scene"ボタンを押すとシーン名の変更ができます。

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

シーングループの作成・編集

複数のシーンを選択し、グループ名を入力後、"Create SceneGroup"ボタンを押すと、シーングループを作成します。

これにより、シーンをグループ化する事ができます。

シーングループのシーンの追加・削除も可能です。

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

マルチシーンの作成・編集

複数のシーンを選択し、マルチシーンの名前を入力後、"Create MultiScene"ボタンを押すと、最初に選択したシーンをメインシーンとしてマルチシーンを作成します。

マルチシーン名右側の"Load"ボタンを押すと、最初に選択したシーンをOpenSceneMode.Singleでロードした後、その他のシーンをOpenSceneMode.Additiveでロードします。

 マルチシーンのシーンの追加・削除も可能です。

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

ビルドに含むシーンの簡易設定・編集

シーン名を右側の"NonBuild"と書かれたトグルを押すと"Build"となり、ビルド対象のシーンに設定できます。

もう一度押すとビルド対象から外れます。

また、"Scenes In Build"のリストはBuild Settingのものと同様に、並び替える事でシーンのIndexを変更する事ができます。

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

 

導入方法

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追記:書きました

sonoichi-blog.hatenablog.com

20171117追記:プロジェクト内にSceneAssetが存在しない際に表示が崩れるバグを修正しました

*1:Unity2017のみの機能です。

ブログ始めました

はじめまして。

ブログ、始めました。

 

 

なぜ始めたか

自分を発信する

伝える力をつける

ためです。

 

自分を発信する

最近、「発信力」は大事、と教わる機会がありました。

思ってることも、いいアイデアも、発しないと何も伝わらないのと同じで、

自分を知ってもらうには、自分をアウトプットしていかないと、ってことです。

自分を知ってもらい、何らかの印象を持ってもらう(タグ付けしてもらう)ことで、

信頼やチャンスを得ることができるかも?

 

伝える力をつける

 池上彰さんの著書「伝える力」には「深く理解していないと、分かりやすく

説明できない」と書かれていました。

まさにその通りだと思っていて、例えば自分の場合、ある技術を説明しようにも、

具体的な内容を突かれると説明できず、理解の浅さを痛感させられたり…

記事に起こし、伝えようとすることで、自分のわかっていない部分に気づき、

理解を深める良いきっかけになると思ってます。

 

最後に

技術不足をバンバン晒していくことになるとは思いますが、

それ故に「なんでこうしたの?」ってツッコミとか、

「こうした方がいいよ」ってアドバイスとかいただけたらとても嬉しいです。

 

負担にならない程度に、ぼちぼち更新していきますので、

どうぞよろしくお願いします。