テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Assembly definition fileのDefine Constrainsで、Scripting Define Symbolsで定義したシンボル毎に動作を切り替える

Assembly definition fileに少し便利な機能が追加されていたので、メモ

本記事はUnity 2018.3がベースです。

Assembly definition file

簡単に言えばコンパイルプロジェクトを分割することでコンパイルの高速化等を行うというものです。この機能を理解しないで適当に使うと逆にコンパイル時間が伸びるかもしれませんが、ちゃんと使うと結構有益なイメージです。

また、なんとなくIL2CPP時のインクリメンタルビルドにも影響がある気がしていますが、実際どうなのかは未確認です。

tsubakit1.hateblo.jp

Assembly definition fileとプラットフォームによる動作の切り替え

Assembly definition fileはプラットフォーム毎に含めるかどうかを定義することが出来ます。例えばIOSのみ、Androidのみコード群を含めると言った具合に。この機能を上手く使うと、エディター上の動作と実機の動作用のプロジェクトは完全に分割することが出来ます。

インターフェースをちゃんと定義する必要はあると思いますが、コード群が非常にスッキリするんじゃないでしょうか。勿論インターフェースの用意を忘れずに。

f:id:tsubaki_t1:20190303231729j:plain
プラットフォームごとにAssembly Definition Fileを分割

Define Constrains(制約を定義)

さて、今まではこういった「Assembly Definition Fileによる動作の切り替え」はプラットフォーム単位でしか出来ませんでしたが、「制約を定義(Define Constrains)」という機能が追加され、手前側でも追加でコントロールすることが可能になりました。

f:id:tsubaki_t1:20190303232243j:plain

この機能は、単純にScripting Define Symbolsにシンボルが記述されていなければ、Assembly Definition Fileのプロジェクトは含まれない というものです。

例えばプラットフォームEditorにて、シンボル毎に動作を切り替えたいとします。まぁデバッグ用とか、ロード先の切り替えとか云々。で、制約を定義でそれぞれ「MY_DEBUG1」と「MY_DEBUG2」というシンボルを要求する感じにします。

f:id:tsubaki_t1:20190303233848j:plain

あとはPlayerSettingsScripting Define Symbolsを差し替えてやるだけで、動作が切り替わります。

f:id:tsubaki_t1:20190303233815j:plain

なお含まれるのは「何もシンボルを指定していない」もしくは「シンボルが一致するもの」です。(なのでMY_DEBUG1とMY_DEBUG2に分けた)

感想

最初はAssembly definition file毎にシンボルを指定できる機能だと思ったのは秘密。mcs.rspをプロジェクト毎に置くといった事も駄目だし、うーん

関連

tsubakit1.hateblo.jp