もんりぃ is undefined.

育児ネタとか、技術ネタとか。

強制的に Scenes in Build にシーンを突っ込む

はじめに

Unity Package Manager で提供するライブラリ内にあるシーンを自動的に Scenes in Build に入れたいなぁとか思ってしまったので、アプローチを考えてみました。

TL; DR

このスクリプトを Editor 向けな ADF 以下に置いて、 SceneName の初期化文字列を突っ込みたいシーン名に変えれば OK。

なにこれ?

UPM (じゃなくても)でライブラリとかを配る際に、シーンアセットもセットで配りたくなるコトありますよね?

んでもって、そのシーンアセットを Scenes in Build に追加してビルド対象にしたくなるコトありますよね?

「ねーよwww」って声が聞こえた気もしますが、実際あったんですよ。私は。

てことで、雑に書き殴ってみたのでそれをブログに認(したた)める次第です。

要件

  • 極力設定とかそういうのはしたくない
  • UPM でパッケージを取り込んだら、その時点で設定が完了していて欲しい
  • 多重に追加されるとかは勿論 NG

詳細

TL; DR に書いたスクリプトを UPM で配布するスクリプトに放り込んで、 SceneName の初期化文字列のシーン名を変えれば OK です。

流れとしては、以下のような感じですね。

  1. [UnityEditor.InitializeOnLoad] 属性でエディタ初期化時に発動するスクリプトとしてマーク
  2. エディタ初期化時に static コンストラクタが呼び出される
  3. 当該クラスの static プロパティ初期化時に AssetDatabase から当該シーンの GUID を検索しておく
  4. 当該シーンの GUID が EditorBuildSettings.scenes 内に含まれるかどうかを調べる
  5. 含まれていないなら EditorBuildSettingsScene クラスを追加する

ね?かんたんでしょう?

いや、まぁもうちょっと汎用的にするコトもできるんですが、メンドイので誰かやってくださいw

おわりに

かなり力業なコードなので、もっとスマートな方法はあると思います。
が、社内ライブラリとかでサクッとやる分にはこんなもんじゃないでしょうか?

なお、久しぶりにこの手のプログラミング成分多めな記事を書いたので、キャラがブレまくりですがご容赦ください。