Assembly definition fileに少し便利な機能が追加されていたので、メモ
本記事はUnity 2018.3がベースです。
Assembly definition file
簡単に言えばコンパイルプロジェクトを分割することでコンパイルの高速化等を行うというものです。この機能を理解しないで適当に使うと逆にコンパイル時間が伸びるかもしれませんが、ちゃんと使うと結構有益なイメージです。
また、なんとなくIL2CPP時のインクリメンタルビルドにも影響がある気がしていますが、実際どうなのかは未確認です。
Assembly definition fileとプラットフォームによる動作の切り替え
Assembly definition fileはプラットフォーム毎に含めるかどうかを定義することが出来ます。例えばIOSのみ、Androidのみコード群を含めると言った具合に。この機能を上手く使うと、エディター上の動作と実機の動作用のプロジェクトは完全に分割することが出来ます。
インターフェースをちゃんと定義する必要はあると思いますが、コード群が非常にスッキリするんじゃないでしょうか。勿論インターフェースの用意を忘れずに。
Define Constrains(制約を定義)
さて、今まではこういった「Assembly Definition Fileによる動作の切り替え」はプラットフォーム単位でしか出来ませんでしたが、「制約を定義(Define Constrains)」という機能が追加され、手前側でも追加でコントロールすることが可能になりました。
この機能は、単純にScripting Define Symbolsにシンボルが記述されていなければ、Assembly Definition Fileのプロジェクトは含まれない というものです。
例えばプラットフォームEditor
にて、シンボル毎に動作を切り替えたいとします。まぁデバッグ用とか、ロード先の切り替えとか云々。で、制約を定義でそれぞれ「MY_DEBUG1」と「MY_DEBUG2」というシンボルを要求する感じにします。
あとはPlayerSettings
のScripting Define Symbols
を差し替えてやるだけで、動作が切り替わります。
なお含まれるのは「何もシンボルを指定していない」もしくは「シンボルが一致するもの」です。(なのでMY_DEBUG1とMY_DEBUG2に分けた)
感想
最初はAssembly definition file毎にシンボルを指定できる機能だと思ったのは秘密。mcs.rspをプロジェクト毎に置くといった事も駄目だし、うーん