Version: 2017.2
Plugin Inspector
Native Plugins

Managed Plugins

Обычно скрипт в проекте содержится как файл исходного текста и компилируется Юнити при изменении. Однако также возможно компилировать скрипт в динамически связываемую библиотеку (dll) используя внешний компилятор. Результирующая dll может быть затем добавлена к проекту, а содержащиеся в ней классы прикреплены к объекту как обычные скрипты.

Намного легче работать со скриптами, чем с dll. Однако вы можете иметь доступ к коду поставляемому третьей компанией в форме dll. Когда вы разрабатываете свой собственный код, вы можете использовать компилятор не поддерживаемый в Юнити (например F#) скомпилировав код в dll и добавив его к проекту Юнити. Также вы можете захотеть распространять свой Юнити код без исходника (для продажи на АссетСторе, например), а dll - легкий путь сделать это.

Создание dll

Для создания dll вам нужен сначала подходящий компилятор. Не все компиляторы, которые производят .NET код гарантированно работают с Юнити, так что стоит проверить компилятор с каким-то доступным кодом, прежде чем делать значительную работу с ним. Если dll не содержит код, обращающийся к АПИ Юнити,- вы можете просто скомпилировать его в dll используя соответствующие опции компилятора. Если вы хотите использовать АПИ Юнити, вам нужно сделать dll движка Юнити доступными для компилятора. На Мак они содержатся в пакете приложения (вы можете увидеть внутреннюю структуру пакета командой Показать содержимое Пакета (Show Package Contents) из контекстного меню - правым щелчком или Ctrl-click на приложении Юнити):-

Путь к dll Юнити обычно такой

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

…а две нужных dll называются UnityEngine.dll и UnityEditor.dll.

На Виндовс dll могут быт myfqltys в папках, принадлежащих приложению Юнити. Путь обычно такой

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

…а имена dll такие же как на Мак ОС.

Точные опции для компилирования dll сильно завися от используемого компилятора. Например командная строка для Моно C# компилятора mcs на Мак ОС может выглядеть так:-

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

Здесь опция -r указыват путь к библиотекам, включаемым в построение, в данном случае - Юнити библиотекам. Опция -target указывает какой тип построения требуется,- слово “library” используется для построения dll. Имя исходного файла для компилирования ClassesForDLL.cs (предполагается что этот файл в текущей рабочей папке, но вы можете указать полный путь если нужно). Если все пройдет хорошо результирующий dll файл появится в той же папке, что исходный.

Использование dll

После компиляции dll файл может быт просто перетащен в Юнити проект как и любой другой ассет. Dll ассет имеет треугольник раскрывающий содержимое файла для выбора отдельного класса внутри библиотеки. Классы, которые были унаследованы от MonoBehaviour могут быть перетащены на ГеймОбъект как обычные скрипты. Не MonoBehaviour классы могут быт использованы прямо из других скриптов обычным путем.

A folded-out DLL with the classes visible
A folded-out DLL with the classes visible

Пошаговое руководство для MonoDevelop и Visual Studio

В этой секции вы узнаете как собрать и интегрировать простую dll с использованием MonoDevelop и Visual Studio, и как подготовить отладочную сессию для этой DLL.

Настройка проекта

Сначала, откройте MonoDevelop или Visual Studio и создайте новый проект. В MonoDevelop, это делается открытием File > New > Solution и затем выбором C# > Library. В Visual Studio, вы должны открыть File > New > Project и затем выбрать Visual C# > Class Library.

Затем нужно заполнить информацию о новой библиотеке:

  • Name это пространство имен (в этом примере, используйте “DLLTest” в качестве названия).
  • Location это корневая папка проекта.
  • Solution name это папка проекта (название solution).

Далее вы должны добавить ссылки на DLL библиотеки Unity. В MonoDevelop, вы должны открыть контекстное меню для Ссылок в Solution Browser(Браузере Решений) и выбрать Edit References. Теперь выберите опцию .Net Assembly tab > File System > select file. В Visual Studio, откройте контекстное меню для Ссылок в Solution Explorer и выберите Add Reference. Затем, выберите опцию Browse > Browse > select file.

На данном этапе, у вас будет возможность выбрать нужный DLL файл. В Mac OSX, файл можно найти в

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

… в то время как на Windows, путь

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

Код

Для этого примера, переименуем класс в “MyUtilities” в Solution browser, и заменим его код на следующее:

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

  1. Для этого примера, создайте новый проект в Unity, и скопируйте собранный файл <project folder>/bin/Debug/DLLTest.dll в папку Assets. Затем, создайте C# скрипт под именем “Test” в Assets, и замените его содержимое на следующий код:
using UnityEngine;
using System.Collections;
using DLLTest;

public class Test : MonoBehaviour {

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

Когда вы присоедините этот скрипт к объекту в сцене, и нажмете Play, вы увидите вывод кода из DLL в окне консоли.

Настройка отладочного сеанса для DLL

Во-первых, вы должны исправить отладочные символы для DLL. В MonoDevelop, скопируйте файл сборки <project folder>/bin/Debug/DLLTest.dll.mdb в папку Assets/Plugins. В Visual Studio, выполните

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.

Далее, откройте “Test” скрипт в MonoDevelop. Убедитесь что отладчик Unity включен в меню Tools (Windows) или меню MonoDevelop-Unity (MacOS). Из этого меню вам необходимо следующее Add-in Manager > Installed tab > Unity > select Mono Soft Debugger Support for Unity > Enable.

После завершения настройки, вы сможете производить отладку кода использующего DLL, в Unity как обычно. Смотрите раздел Scripting Tools для получения дополнительно информации об отладке.

Plugin Inspector
Native Plugins