初めに
- ソースコード方式で提供されているAssetがあります。
これは便利なのですが、いろいろな理由によりDLLにしたくなった場合の手順が
Mono前提だったり、Export考慮が漏れていたりしたので改めてまとめました。
前提
- Unity5.1.1p4 / VisualStudio2013 で DLL 化した時の手順です。
- 各種Asset毎の固有事情もあるので先に各Asset固有の手順に目を通してみてください。
手順
ソリューションを出力する
- 対象のAssetのみのUnityプロジェクトを作成する
- 今回対象のUniRxの場合はgithubからソースを落とした状態です。
- UnityVS2015が入っているので、2013に入れ替える ( VS2015を使用している人はスキップしてください )
-
Visual Studio 2015 Tools for Unity extension をインストールする
- VS2015がインストールされていなくてもインストールは可能
- UnityVS(VS2015用)を削除
- UnityVS(VS2013用)を追加
- Assets - Import Package - Visual Studio 2013 Tools で簡単に追加可能
-
Visual Studio 2015 Tools for Unity extension をインストールする
- Examples など不要なファイルを消す
- Editor ディレクトリを削除していく
- 後述
- Generate Project Files
DLLを出力する
- プロジェクトのプロパティから出力ファイル名を変更する
- Application - Assembly name が Assembly-CSharp になっているので任意の名前に変更
- Editorの方も同様に変更
- Release に設定 ( これは好みかも? )
- ビルドする
プロジェクトにDLLをコピーする
- DLLが出力されていることを確認する
- デフォルト設定だと Temp\UnityVS_bin\Release\
- DLLを導入したいプロジェクトの任意のディレクトリ(Assets以下)にコピーする
- 依存するdllも同ディレクトリにコピーされているので必要なもののみコピーしてくる
- UnityをRefresh(デフォルトだとフォーカスすれば自動でRefresh)
各Asset固有の手順
UniRx
- #if UNITY_EDITOR 対策 (未検証)
- UniRx/DllsにあるプロジェクトでDLLを生成するらしい。
- @neuecc さんご指摘ありがとうございます。
- UniRx/DllsにあるプロジェクトでDLLを生成するらしい。
手順
- UnityでUniRxレポジトリのRootディレクトリを開く
- Library/UnityAssemblies/*.dll をUnityに持ってきてもらう
- UnityVS.UniRx.sln を開く
- 少なくともVS2013の場合は以下の対応が必要
- NuGetManagerを開いてRestoreする
- UniRx.TestsにLibrary/UnityAssemblies/UnityEngine.dllへの参照を追加する
- 少なくともVS2013の場合は以下の対応が必要
- ビルドする
- Dlls/UniRx.Library.Unity/bin/Debug/ にUniRx.dllとUniRx.Unity.dllが出力されているので使う(未検証)
- Releaseビルドだといろいろ参照が足りないって怒られるのでUnityEngine.dllなどを追加する(未検証)
UnityTestTools
- NUnit系のDLLを忘れずにコピーする
- UnitTesting/Editor/NUnit/Libs/*.dll
- UnitTesting/NSubstitute/*.dll
- 画像系ファイルがパス指定で読み込まれているようなので、そのままコピー
- Common/Editor/icons/*.png
- IntegrationTestsFramework/TestingAssets/*.prefab
- IntegrationTestsFramework/TestingAssets/*.png
- IntegrationTestsFramework/TestingAssets/Materials/*.mat
課題
- そもそもそこまでする必要ない可能性が浮上(未確認)
- Library/ScriptAssemblies/ にあるAssembly-CSharp*.dllをリネームして使うだけでも十分かもしれない。