アセット コンポーネント
ネットワーク リファレンス ガイド

Unity Project での Mono DLL 使用

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Sumbission failed

For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

通常,スクリプトはプロジェクトにソースファイルとして保持され,ソースが変更されたときにUnity によりコンパイルされます。しかし外部コンパイラを用いてスクリプトを__ダイナミック リンク ライブラリ__ (DLL) としてコンパイルすることも出来ます。結果の DLL は次にプロジェクトに追加して,それに含まれるクラスは通常のスクリプトと同様にオブジェクトにアタッチできます。

一般的にDLLよりもスクリプトで作業をしたほうが簡単です。しかし,DLL 形式で提供された サードパーティ製 Mono コードをアクセスしないといけない場合があります。自身のコードを開発するとき,Unity によりサポートされないコンパイラを使用できる場合があり(例えば F#),コードを DLL としてコンパイルし Unity プロジェクトに追加することが出来ます。さらに,ソースコードを提供することなくUnity コードを提供したい場合があり(例えば Asset Store プロダクトなど),その場合に DLL はこれを実現する簡単な方法です。

DLL の作成

DLL を作成するには,最初に適切なコンパイラが必要です。.NETコードを生成する全てのコンパイラは Unity で動作することが保証されていないため,大量の作業に着手する前にコンパイラを何らかのコードでテストしておくことが賢明です。もし DLL がUnity APIに依存するコードが何もない場合,適切なコンパイラ オプションを使用してシンプルに DLL とすることができます。もし Unity API が使用したい場合, Unity 自身の DLL をコンパイラで利用可能とする必要があります。 Mac ではこれらはアプリケーション バンドルに含まれます(コンテキストメニューからShow Package Contentsコマンドを使用することでバンドルの内部構造が見れます。Unity アプリケーションを右クリックまたは Ctrl を押しながらクリックします):-

Unity DLL へのパスは通常,

/Applications/Unity/Unity.app/Contents/Frameworks/Managed/

…であり,2 つの DLL は UnityEngine.dll および UnityEditor.dll と名前がついています。

Windows では,DLL は Unity アプリケーションについてきたフォルダにあります。パスは通常

C:\Program Files\Unity\Editor\Data\Managed

…であり,DLL のファイル名は Mac OS 向けと同じです。

DLL をコンパイルするときの正確なオプションは使用されるコンパイラにより幅があります。例えば Mono C# コンパイラ,すなわち mcs,のコマンドラインは Mac OS では次のように見えます:-

mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs 

ここで,-r オプションはビルドに含めるべきライブラリへのパスを指定し,この場合は UnityEngine ライブラリです。 -target オプションによりどのビルドが必要であるか指定し, “library” という文字列は DLL ビルドを選択するために用いられています。最後に,コンパイルするソースファイルは ClassesForDLL.cs です(このファイルがカレントの作業フォルダにあることが前提ですが,必要であればファイルをフルパス指定できます)。全てがうまく行く前提で,結果の DLL ファイルはソースフォルダと同じ場所に表示さます。

DLL の使用

一回コンパイルされた後,DLL は他の全てのアセットと同様に,Unity プロジェクトにドラッグ&ドロップできます。DLL アセットにはたたまれた 三角形マーク があり,ライブラリの中の別クラスを明らかにします。MonoBehaviour から得られるクラスは通常のスクリプトと同様にゲームオブジェクト上にドラッグ&ドロップできます。非MonoBehaviour クラスは他のスクリプトから通常の方法で直接使用できます。

クラス名が表示されている,展開された DLL
クラス名が表示されている,展開された DLL

MonoDevelop および Visual Studio 手順ガイド

このセクションでは 簡単な DLL でのサンプルをビルドして,.NET ライブラリを生成するメジャーな IDE である MonoDevelop および Visual Studio と統合する方法を学びます。このセクションではさらに DLL のデバッグ セッションを準備する方法も説明します。

プロジェクトのセットアップ

まず,MonodevelopかVisual Studioで新規プロジェクトを作成します。MonodevelopではFile > New > SolutionC# > Libraryを選択し,Visual StudioではFile > New > Project からVisual C# > Class Libraryを選択します。

新規ライブラリの情報を入力します:

  • Name は名前空間であり,このサンプルでは “DLLTest” を使用します。
  • Location はプロジェクトの親フォルダです。
  • Solution name はプロジェクトフォルダです。

次に,Unity DLLの参照を追加しなければいけません。Monodevelopでは,ソリューション ブラウザで_コンテキストメニュー_を開き(右クリック), Edit references を選択し,.Net Assembly tab > File System > select fileのオプションを選択します。Visual Studioでは,ソリューション エクスプローラでコンテキストメニューを開き(右クリック), Add Reference を選択し,Browse > Browse > select fileのオプションを選択します。

At this stage, you will have the option to select the required DLL file. On Mac OSX, the file can be found at

    Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll

…while on Windows, the path is

    Program Files\Unity\Editor\Data\Managed\UnityEngine.dll

Code

このサンプルでは,ソリューション ブラウザ でクラスの名前を “MyUtilities” にリネームしたうえ,次のコードと置き換えます:

     using System;  
     using UnityEngine;

     namespace DLLTest {

        public class MyUtilities {
    
            public int c;

            public void AddValues(int a, int b) {
                c = a + b;  
            }
    
            public static int GenerateRandom(int min, int max) {
                System.Random rand = new System.Random();
                return rand.Next(min, max);
            }
        }
     }

最後にプロジェクトをビルドして DLL ファイルおよびそのデバッグシンボルを生成します。

DLL を Unity で使用する

このサンプルでは<project folder>/bin/Debug/DLLTest.dllとして作成したものをUnityプロジェクトへコピーし,C# スクリプトとして “Test” を Assets フォルダに作成し,次のコードと置き換えます:

     using UnityEngine;
     using System.Collections;
     using DLLTest;
    
     void Start () {
        MyUtilities utils = new MyUtilities();
        utils.AddValues(2, 3);
        print("2 + 3 = " + utils.c);
     }
    
     void Update () {
        print(MyUtilities.GenerateRandom(0, 100));
     }

最後にスクリプトをシーン上のオブジェクトにアタッチして(すなわち Main Camera),シーンを実行します。出力結果は Console ウィンドウで見られます。

DLL のデバッグ セッションをセットアップ

Firstly, you should repare the debug symbols for the DLL. In MonoDevelop, copy the built file <project folder>/bin/Debug/DLLTest.dll.mdb into the Assets/Plugins folder. In Visual Studio, execute

Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe

in the command prompt, passing <project folder>\bin\Debug\DLLTest.pdb as a parameter. Then, copy the converted file <project folder>\bin\Debug\DLLTest.dll.mdb into Assets/Plugins.

Next, open the “Test” script in MonoDevelop. Make sure the Unity debugger is enabled from the Tools menu (Windows) or MonoDevelop-Unity menu (MacOS). The option you need from this menu is Add-in Manager > Installed tab > Unity > select Mono Soft Debugger Support for Unity > Enable.

With this setup completed, you can debug code that uses the DLL in Unity in the usual way. See the Scripting Tools section for further information about debugging.

アセット コンポーネント
ネットワーク リファレンス ガイド