この記事では Unity の C# スクリプトをDLL化する手順と注意点について説明します。
執筆時に扱った Unity のバージョンは 2021.1.6f1 です。
プラットフォームは Windows 10 (64ビット版) を対象としています。
Unity 用の DLL を作るときに決めなければならないことがあります。
以下の2点です。
1. PC 向けの DLL を作る。
2. マルチプラットフォームに対応した DLL を作る。
どちらにするかで、使うライブラリが変わります。
Unity が読み込める DLL は、.Net Framework 4 か、.Net Standard 2.0 のどちらかです。
Visual Studio の最新バージョンを使っていれば、最新の C# コードが書けますが、DLL として読み込む場合は、このルールに従う必要があります。
.Net Framework と .Net Standard は別物です。
扱える機能も違いますし、対応している言語仕様も違います。
詳しくはこちらに記載されています。
PC 向けの DLL を作る場合、.Net Framework 4 を使って DLL を作ることができます。
4.6.1 とか、4.8 とか、小数点以下はなんでもOKです。
.Net Framework 4 なら、わりとモダンなコードも許されます。
PC 向けのプロジェクトなら、こちらを選んだ方が楽です。
Visual Studio を使います。
コマンドラインで直接 C# コンパイラを実行すれば DLL を作れますが、Visual Studio を使った方が楽です。
無料ですので、ダウンロードしてインストールします。
※企業の場合は、5人まで無料版を使えます(2021/05/23現在)。
インストールするのは上記の3項目です。
※英語が苦手な方は、「言語パック」から「日本語」を選択して日本語環境にすると良いです。
※UE4を使う場合は日本語環境にしていると出力ログが文字化けするので英語環境にしないといけなかったりします。
.Net Framework 4.8 SDK と Targeting Pack をインストールしていない場合はインストールします。
※Targeting Pack は必要ないかも知れません。
※Visual Studio の各UIはバージョンによってデザインが変わるので、スクリーンショットの内容とお手元の Visual Studio では内容が違うかも知れません。
※スクリーンショットは Visual Studio Community 2019 16.9.6 のものです。
↓
かなり沢山のテンプレートがあって探すのが面倒なので、上にある検索条件を入力します。
.net framework C# ウィンドウズ ライブラリ
を指定すれば、「クラスライブラリ(.NET Framework)」がトップに出てきます。
↓
プロジェクト名 → てきとう
場所(プロジェクトの保存場所)→ てきとう
フレームワーク→ .NET Framework 4.8
↓
Unity の機能を使うには、UnityEngine.dll が必要です。
Unity のエディタ拡張を使うには、UnityEditor.dll が必要です。
必要に応じて、↑のどちらか、あるいは、両方をプロジェクトに追加します。
どちらも使用しないなら追加する必要はありません。
Unity Hub を起動してインストールを選択。
UnityEngine.dll を使いたいバージョンの上で右クリックして「エクスプローラーで表示」を選択。
↓
エクスプローラーの検索ボックスに UnityEngine.dll と入力して検索。
複数ある場合はどれを使ってもOKです。
この UnityEngine.dll に対してパスを通してもいいですが、このバージョンの Unity をアンインストールするとパス参照が無効になるので、Visual Studio で作成した DLL のプロジェクトフォルダにコピペした方がいいです。
特に f1 を使っている場合は頻繁にインストールとアンインストールを繰り返すので。
↓
見つけた UnityEngine.dll と UnityEditor.dll を Visual Studio のプロジェクトにコピペ
↓
Visual Studio に戻る。
ソリューションエクスプローラーの参照を右クリック。
参照の追加を選択。
↓
参照マネージャーの左ペインにある「参照」を選択して、右下にある「参照」ボタンを押す。
↓
ファイル選択ダイアログが開くので、UnityEngine.dll と UnityEditor.dll をコピペしたフォルダに移動し、それらのファイルを選択して「追加」ボタンを押す。
↓
参照マネージャーに戻って、UnityEngine.dll と UnityEditor.dll の左側にチェックマークが付いているのを確認して、OKを押す。
※チェックマークが付いていない場合はクリックしてチェックする。
↓
ソリューションエクスプローラーの「参照」欄に UnityEditor と UnityEngine が追加されたのを確認。
※追加されてない場合はどこかで間違えてます。
↓
UnityEngine.dll と UnityEditor.dll が正しく参照できるか確認します。
ソースコードの上の方に
using UnityEngine;
using UnitiEditor;
を追記してビルド
メニューのビルド→ソリューションのビルド
または
Ctrl + Shift + B
↓
ビルドに失敗する場合はソースコードに余計な文字が入っていないか、入力ミスをしていないか、参照に UnityEditor と UnityEngine が追加できているかを確認。
ソースコードに問題がない場合、一度 UnityEditor と UnityEngine を削除して(選択して Del キー)、追加し直します。
追加する際、パスが間違っていないか、一字一句丁寧に確認してください。
↓
ビルドに成功していれば、DLL のプロジェクトフォルダ > bin > Debug に DLL があります。
これを Unity の Assets フォルダにコピペして使います。
※Release ビルドした場合は Release フォルダに DLL が作られます。
ためしに、こんなコードにして DLL を作成します。
なんともヒャッハー味あふれる DLL が出来上がりました。
↓
↓
これでプレイすると、コンソールにヒャッハー!味あふれるログが出力されるはずです。
↓
ヒャッハー!!
成功だあああああ!
.NET Framework 4 対応の DLL はウィンドウズ以外も、Linux x64 と Mac OS x64 でなら利用できます。
スマホやそれ以外のプラットフォームでは使えません(多分)。
Visual Studio をインストールしていない場合は、「1. PC 向けの DLL を作る。」の手順に沿ってインストールして下さい。
マルチプラットフォームに対応する場合、.NET Standard 2.0 をインストールする必要があります。
.NET Standard 2.0 は Visual Studio インストーラーではインストールできません。
もしかしたら、できるかも知れませんが、私はこれから説明する方法でインストールしました。
.Net Standard 2.0 は Visual Studio の NuGet パッケージマネージャーを使ってインストールできます。
インストールするには、Visual Studio のソリューションが必要なので、てきとうに作ります。
C# コンソールプロジェクトであれば、他のプロジェクト名や設定は全てデフォルト値で OK です。
↓
↓
メニュー → ツール → NuGet パッケージマネージャー → パッケージマネージャーコンソール
※GUI版でもインストールできますが、コンソールの方が簡単です。
↓
パッケージマネージャーコンソールを選択すると、下にパッケージマネージャーコンソールが表示されます。
Install-Package NETStandard.Library -Version 2.0.0
をコピペして Enter を押す。
↓
↓
プロジェクトを閉じる。
保存するか聞かれたら、上書き保存しておく。
これで .Net Standard 2.0 が使えるようになります。
使えなくなったら、同じ手順で再インストールすれば OK です。
Visual Studio を起動して、新しいプロジェクトの作成
↓
.net standard C# ライブラリ で検索して、クラスライブラリを選択。
↓
↓
↓
あとは、.Net Framework と同じです。
こんどは少し処理を変えてみます。
↓
ビルドして、Unity にインポート
↓
実行