UnityでのDLL利用とアセンブリ参照の技術資料
この資料では、Unityプロジェクトに外部DLLを取り込む方法や、DLLを使ったクラスの利用について解説します。Unity特有のアセンブリ参照の仕組み、Plugins フォルダーの役割、プラットフォームごとの対応についても説明します。
外部DLLの参照方法
Unityでは、外部DLLを直接プロジェクトに取り込む際、アセンブリ参照を明示的に設定する必要はありません。DLLファイルをUnityの Assets/Plugins フォルダーに配置することで、Unityが自動的にそのDLLを参照します。
ステップ 1: Plugins フォルダーの作成とDLLの配置
Assets/Pluginsフォルダーを作成:
- Unityプロジェクト内の 
AssetsフォルダーにPluginsという名前のフォルダーを作成します。 
- DLLを 
Pluginsフォルダーに配置: 
- 外部でビルドしたDLLファイルをこの 
Pluginsフォルダーにコピーまたはドラッグ&ドロップします。これで、Unityは自動的にDLLを参照します。 例: 
   /Assets
   ├── /Plugins
   │   └── MyLibrary.dll  <-- 外部でビルドされたDLLファイル
   └── /Scripts
       └── UseMyLibrary.cs <-- DLLのクラスを使用するスクリプト
- 複数のプラットフォームでの使用:
 
Pluginsフォルダーを使うことで、Windows、macOS、Androidなどのプラットフォームごとに異なるDLLを配置できます。後述するように、プラットフォームに依存したフォルダー分けを行い、各プラットフォームに最適なDLLを配置します。
DLLクラスの利用例
DLLが Plugins フォルダーに配置された後は、Unityスクリプトからそのクラスやメソッドを通常のC#クラスと同じように利用できます。
ステップ 2: スクリプトでDLL内のクラスを利用
- DLLファイルを 
Pluginsフォルダーに配置した後、スクリプト内でusingキーワードを使ってDLL内の名前空間を参照します。 
using UnityEngine;
using MyLibraryNamespace;  // DLLで定義されている名前空間
public class UseMyLibrary : MonoBehaviour
{
    void Start()
    {
        // DLL内のクラスをインスタンス化
        MyClassFromDLL myClass = new MyClassFromDLL();
        Debug.Log(myClass.GetMessage());
    }
}
- このように、
MyLibrary.dllに含まれるMyClassFromDLLをインスタンス化してメソッドを呼び出すことができます。 
フォルダー構成例
Unityプロジェクト内にDLLを取り込んだ後のフォルダー構成は次のようになります。Assets/Plugins フォルダーにDLLを配置し、そのDLLが自動的に参照されます。
/Assets
├── /Plugins
│   └── MyLibrary.dll   <-- 外部DLLファイル
└── /Scripts
    └── UseMyLibrary.cs <-- DLLを利用するスクリプト
Plugins フォルダーの役割
Plugins フォルダーは、外部のDLLやネイティブライブラリをUnityに取り込む際に使用する特別なフォルダーです。このフォルダーに配置されたDLLは、Unityが自動的に検出し、プロジェクト内のスクリプトから参照できるようになります。
クロスプラットフォーム対応
Unityでは、WindowsやmacOS、iOS、Androidなど、複数のプラットフォームに対応するため、各プラットフォームごとに異なるDLLやネイティブライブラリを使用できます。Plugins フォルダーの中で、プラットフォームごとにフォルダーを分けて管理します。
フォルダー構成例(複数のプラットフォーム対応)
/Assets
├── /Plugins
│   ├── /Windows
│   │   └── MyLibrary.dll
│   ├── /macOS
│   │   └── MyLibrary.dylib
│   └── /Android
│       └── MyLibrary.so
- Windowsフォルダー: Windows向けの 
.dllファイルを配置します。 - macOSフォルダー: macOS向けの 
.dylibファイルを配置します。 - Androidフォルダー: Android向けの 
.soファイルを配置します。 
Unityは自動的に適切なプラットフォーム用のDLLやライブラリを選択して使用します。
特殊なアセンブリ参照の必要性
通常、Plugins フォルダーにDLLを配置するだけで、Unityは自動的にそのDLLを参照しますが、特定のシナリオでは追加の設定が必要になる場合があります。
エディター拡張でのDLL利用
Unityのエディター拡張やツールを作成している場合、DLLをエディターでのみ使用したいことがあります。この場合、Assets/Editor フォルダーにDLLを配置します。
/Assets
└── /Editor
    └── MyEditorLibrary.dll  <-- エディター専用DLL
- エディター専用DLL: このDLLはエディターでのみ使用され、ゲームビルドには含まれません。
 
プラットフォームごとのDLL参照設定
特定のプラットフォームでのみDLLを使用する場合、Unityのインスペクターから対象のDLLを選択し、どのプラットフォームで有効にするかを設定できます。
Assets/Pluginsフォルダー内のDLLファイルを選択。- インスペクターウィンドウで 
プラットフォーム設定を指定し、使用するプラットフォームを選択します。 
- 例えば、Windowsでのみ有効にしたい場合は、Windows用のオプションをチェックします。
 
まとめ
- UnityでのDLL参照は、
Assets/PluginsフォルダーにDLLを配置することで自動的に行われます。手動でアセンブリの参照を設定する必要はありません。 - クロスプラットフォーム対応として、プラットフォームごとに異なるDLLやネイティブライブラリを 
Pluginsフォルダー内で管理できます。 - エディター専用DLLや特定プラットフォーム向けのDLLを使用する場合は、インスペクターでプラットフォームごとの設定を行います。
 
これにより、Unityプロジェクトでの外部DLLの利用とアセンブリ参照の仕組みを理解し、プロジェクトで適用できるようになります。
この技術資料を参考に、外部DLLをUnityプロジェクトでスムーズに活用することができます。





ディスカッション
コメント一覧
まだ、コメントがありません