C# で書いたコードをあらかじめ マネージド プラグイン
として DLL 化して、Unity で利用するやり方をメモした記事です。自分で使うライブラリーの中で成熟したものは、もう DLL にしてしまってもよいかもしれません。
まず、Unity のプラグイン形式として、つぎの2つがあります:
マネージド プラグインは、通常だとソースコードを書いたソースファイルとしてプロジェクトに保存されており、ソースが変更されると Unity がコンパイルするようなものです。ただし、外部コンパイラーを使って、あらかじめ DLL 化しておくことも可能です。
ネイティブ プラグインは、過去につくった sqlite の DLL のようにプラットフォームごとに別々の DLL を用意するタイプのものです。
この違いを把握しておくほうがよさそうですね。マネージドプラグインは環境に依存しづらく、ネイティブプラグインは環境(プラットフォーム)の影響を受けやすい、とか。汎用的なライブラリーを作成するなら、どっちのプラグインとして開発するでしょうか、とか。
Visual Studio 2019 でライブラリープロジェクトを作成
Visual Studio では、最初にプロジェクトを作成する際に、クラスライブラリーのコンパイル形式を決める必要があります。
Unity で利用できるクラスライブラリーを作成するには、Unity がサポートするコンパイル形式のライブラリーを作成する必要があります。
.NET Standard 2.0 | .NET 4.x | |
---|---|---|
.NET Standard | サポートあり | サポートあり |
.NET Framework | 制限あり | サポートあり |
.NET Core | サポートなし | サポートなし |
こんな感じなので、実際的には .NET Standard か .NET Framework のクラスライブラリーを作成すればよさそうです。ポイントは .NET Core で作成しても使えないという点になりそうですね。
ただし、C# 8.0 を利用したい場合は .NET Framework だと今後は不都合な設定になるかもしれません。設定の変更によって C# 8.0 を利用できるようにもできますが、Microsoft サポート外です。まだまだ目新しいのですが .NET Standard にするほうがいいような気がします。どういうものか調べるだけでいいんで、デメリットがわからない・予想できない設定変更よりも、手間コストの先払いというだけで、やさしいと思います。
クラスライブラリーに Unity の DLL を追加する
Unity API にアクセスできないと UnityEngine.Debug.Log()
のような基本的なコードも書けません。不便なので Unity の DLL を参照に追加します。Windows だと以下のパスになります。
- %ProgramFiles%\Unity\Editor\Data\Managed\UnityEngine.dll
これで、Unity 側の機能にもアクセスできるはずです。
個人的に DLL 化するなら、なおさら名前空間とうまく付き合うべきだと思います。「Unity 開発に関する 50 の Tips 〜ベストプラクティス〜2016 Edition」は考え方の参考になると思います。すべてのコードを名前空間に入れること、というTips があります。
利用
Unity のプロジェクトに対して、Plugins
フォルダーの中に追加すればよいです。
ネイティブプラグインのときは、ここでも色々気をつかいましたが、プラットフォームを選ばないというのは楽ですね。
参考
C# Game Programming Cookbook for Unity
- 作者:Murray, Jeff W.
- 発売日: 2021/03/15
- メディア: ペーパーバック