VisualStudio
Unity
Asset
VisualStudio2013
VisualStudio2015

UnityのAssetをVisualStudioでDLL化して使う

More than 3 years have passed since last update.


初めに


  • ソースコード方式で提供されているAssetがあります。

    これは便利なのですが、いろいろな理由によりDLLにしたくなった場合の手順が

    Mono前提だったり、Export考慮が漏れていたりしたので改めてまとめました。


前提


  • Unity5.1.1p4 / VisualStudio2013 で DLL 化した時の手順です。

  • 各種Asset毎の固有事情もあるので先に各Asset固有の手順に目を通してみてください。


手順


ソリューションを出力する


  1. 対象のAssetのみのUnityプロジェクトを作成する


    • 今回対象のUniRxの場合はgithubからソースを落とした状態です。



  2. UnityVS2015が入っているので、2013に入れ替える ( VS2015を使用している人はスキップしてください )



    1. Visual Studio 2015 Tools for Unity extension をインストールする


      • VS2015がインストールされていなくてもインストールは可能



    2. UnityVS(VS2015用)を削除

    3. UnityVS(VS2013用)を追加


      • Assets - Import Package - Visual Studio 2013 Tools で簡単に追加可能





  3. Examples など不要なファイルを消す

  4. Editor ディレクトリを削除していく


    • 後述



  5. Generate Project Files


DLLを出力する


  1. プロジェクトのプロパティから出力ファイル名を変更する


    • Application - Assembly name が Assembly-CSharp になっているので任意の名前に変更

    • Editorの方も同様に変更



  2. Release に設定 ( これは好みかも? )

  3. ビルドする


プロジェクトにDLLをコピーする


  1. DLLが出力されていることを確認する


    • デフォルト設定だと Temp\UnityVS_bin\Release\



  2. DLLを導入したいプロジェクトの任意のディレクトリ(Assets以下)にコピーする


    • 依存するdllも同ディレクトリにコピーされているので必要なもののみコピーしてくる



  3. UnityをRefresh(デフォルトだとフォーカスすれば自動でRefresh)


各Asset固有の手順


UniRx


  • #if UNITY_EDITOR 対策 (未検証)


    • UniRx/DllsにあるプロジェクトでDLLを生成するらしい。



      • @neuecc さんご指摘ありがとうございます。






手順


  1. UnityでUniRxレポジトリのRootディレクトリを開く


    • Library/UnityAssemblies/*.dll をUnityに持ってきてもらう



  2. UnityVS.UniRx.sln を開く


    • 少なくともVS2013の場合は以下の対応が必要


      1. NuGetManagerを開いてRestoreする

      2. UniRx.TestsにLibrary/UnityAssemblies/UnityEngine.dllへの参照を追加する





  3. ビルドする

  4. 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をリネームして使うだけでも十分かもしれない。