【Unity】ダイナミックリンクライブラリのビルド完了後,自動リロードする
通常時Unityでロードしているdllを上書きする場合はUnityを再起動したりと様々な手続きを行わないといけなく面倒なので,c++をdllにしてUnityで使う場合コストがかかる.
そこでc++で書かれたdllを動的にUnityにリロードさせるパッチがGitHubに公開されている.
i-saintさんが開発されたパッチ,PatchLibrary(https://github.com/i-saint/PatchLibrary)
これを使うことでc++のソースのビルド後簡単に動的にdllをリロードさせることが可能である.
凹さんのところでとてもわかり易く紹介されているが(http://tips.hecomi.com/entry/2017/01/28/163155),今回自分は,このパッチを自らの開発しているc++のプロジェクトとUnityのプロジェクトに適応する方法の備忘録をここに残す.
Env.
- Windows10 64bit
- Unity2019.1.12f1
- VisualStudioCommunity 2019 16.5.4
Method
GitHubよりPatchLibraryのzipをダウンロードする
https://github.com/i-saint/PatchLibraryのリポジトリをzipでダウンロードして
ローカルで解凍する.
DLLを作成するためのプロジェクトを作成
VisualStudioにてDLLを作成するためのプロジェクトを新規作成
プロジェクトの名前は今回”TestDll”に設定した.
適宜何かしらのメソッドを作成する.
上記ソースはpatchLibraryに含まれるサンプルを少し変えたもの.
TestFunctionメソッドを実行すると0が返るだけ.
プロジェクトを作成した際にできた不要ファイルを消して,プリコンパイル済みヘッダーの設定なども行った.
ディレクトリの再配置
Unityのプロジェクトがあるディレクトリ(Assetsのあるディレクトリ)にPatchLibraryなどの名前のディレクトリを作成する.
中身にはPatchLibraryのbinディレクトリと先ほど作成したDLLを作成するためのプロジェクトを配置する.
このディレクトリに配置する理由はGitHubで管理しやすいため.凹さんのところではbinディレクトリを適宜移動し,環境変数でパスを設定した方が楽と書かれていたが,今回はGitHubに一緒にPushする.(500KB程度だからいいや(白目))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
階層構造のサンプル(簡略) projectRoot/ ┣ .gitignore ┣ Assets/ (Unityのフォルダ) ┣ ProjectSettings/ (Unityのフォルダ) ┗ PatchLibrary/ ┣ bin/ ┃ ┣ PatchLibrary64.dll ┃ ┗ PatchLibraryProxy64.exe ┗ dllProject ┣ dllProject.sln ┣ bin/ ┃ ┗ dllProject.dll ┗ dllProject.cpp |
DLL作成プロジェクトの設定
配置後再度DLL作成プロジェクトをVisualStudioから開き,プロジェクトのプロパティから
構成プロパティ – ビルドイベント – ビルド後のイベント
の中のコマンドラインの欄に以下のコマンドを設定する.
1 2 |
xcopy /Yq $(TargetPath) $(SolutionDir)..\..\Assets\Plugins\x86_64\ $(SolutionDir)..\bin\PatchLibraryProxy64.exe /target:Unity.exe /patch:$(TargetPath) |
また,構成プロパティ – 全般 – 出力ディレクトリを以下のものに書き換えた.
通常だとプラットフォーム名などのディレクトリ下にビルドしたものが格納されるが,bin直下に変えている.
通常通りやる場合は前項目のビルド後のイベントのコマンドを適宜書き換える必要がある.
今回はpatchLibraryに含まれていたサンプルを参照した.
動作確認
VisualStudio側でリビルドをすると,Unityを再起動しなくてもdllの差し替えが可能になる.
Unity側はPlay中でも差し替え可能.

Ref.
いつもありがとうございます…