本記事で紹介しているEditor拡張はUnity2017以降では動作しません。
こちらの記事で新たに作り直していますのでご確認下さい。
前置き
Unityでアプリを制作するにあたってプロジェクトの規模が大きくなるにつれて、「Unityの起動が遅くなった」とか「何かやる度にUnityが長時間固まる」とか言う話しを良く耳にします。
これには様々な要因がある訳ですが、その一つがスクリプトのコンパイルに起因すると自分は考えています。*1
通常アプリケーション開発を行う場合
- ソースファイルをコンパイルしてオブジェクトファイルを作成する
- 複数のオブジェクトファイルをリンクして実行ファイルを作成する
というプロセスを踏む訳ですが、Unityではバックグラウンドプロセスとして上記の処理を自動的に処理を行いEditor上でPlayボタンを押すだけでアプリの挙動を確認出来る素敵な仕組みになっています。
しかしながらこの素敵なシステムがくせ者で、Unityからプロジェクトファイルを開く度に全スクリプトのコンパイルが走る為、プロジェクトの規模が大きくなるとプロジェクトを開く為の時間がどんどん長くなっていきます。
まあ、会社に来て朝一回位なら大して問題ないのですが、UnityEditor事クラッシュするようなバグを追っている時に毎回待たされるとかなりのストレスですよね。
毎回、make clean,make allやってる訳ですから。
これをどうにかしたいと考えた時、「動作が安定しているスクリプトファイルを明示的にコンパイルしておけば起動時間が短くなるのでは?」と考えた訳ですが・・・
スクリプトからDLLを作成する方法
Unityにとってコンパイルしてオブジェクトファイルを作るという概念に近いものはDLL生成することのようです。
公式マニュアルを読むとDLLの生成方法はしっかり記述されています。
が、何故かコマンドライン・・・。そして相変わらずドキュメントが何を言っているのかさっぱりわかりません。
「能書きはどうでも良いのでUnityEditorからボタンをぽちっと押すとDLLが出来るサンプル載せろ!」
ということでEditorを拡張してUnityEditor上でスクリプトからDLLを作成するスクリプトを作成してみました。
C#からDLLを作成して、DLLからメソッドの呼び出しを出来る所までは手元で確認しましたが、そんな巨大なプロジェクトは手元にないのでこれで立ち上がりが早くなるかどうかは誰か試してみて結果を教えくれると有難いです。
*1:適当