Обычно скрипт в проекте содержится как файл исходного текста и компилируется Юнити при изменении. Однако также возможно компилировать скрипт в динамически связываемую библиотеку (dll) используя внешний компилятор. Результирующая dll может быть затем добавлена к проекту, а содержащиеся в ней классы прикреплены к объекту как обычные скрипты.
Намного легче работать со скриптами, чем с dll. Однако вы можете иметь доступ к коду поставляемому третьей компанией в форме dll. Когда вы разрабатываете свой собственный код, вы можете использовать компилятор не поддерживаемый в Юнити (например F#) скомпилировав код в dll и добавив его к проекту Юнити. Также вы можете захотеть распространять свой Юнити код без исходника (для продажи на АссетСторе, например), а dll - легкий путь сделать это.
Для создания dll вам нужен сначала подходящий компилятор. Не все компиляторы, которые производят .NET код гарантированно работают с Юнити, так что стоит проверить компилятор с каким-то доступным кодом, прежде чем делать значительную работу с ним. Если dll не содержит код, обращающийся к АПИ Юнити,- вы можете просто скомпилировать его в dll используя соответствующие опции компилятора. Если вы хотите использовать АПИ Юнити, вам нужно сделать dll движка Юнити доступными для компилятора. На Мак они содержатся в пакете приложения (вы можете увидеть внутреннюю структуру пакета командой Показать содержимое Пакета (Show Package Contents) из контекстного меню - правым щелчком или Ctrl-click на приложении Юнити):-
Путь к dll Юнити обычно такой
/Applications/Unity/Unity.app/Contents/Frameworks/Managed/
На Виндовс dll могут быт myfqltys в папках, принадлежащих приложению Юнити. Путь обычно такой
C:\Program Files\Unity\Editor\Data\Managed
Точные опции для компилирования dll сильно завися от используемого компилятора. Например командная строка для Моно C# компилятора mcs на Мак ОС может выглядеть так:-
mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
После компиляции dll файл может быт просто перетащен в Юнити проект как и любой другой ассет. Dll ассет имеет треугольник раскрывающий содержимое файла для выбора отдельного класса внутри библиотеки. Классы, которые были унаследованы от MonoBehaviour могут быть перетащены на ГеймОбъект как обычные скрипты. Не MonoBehaviour классы могут быт использованы прямо из других скриптов обычным путем.
Пошаговое руководство для MonoDevelop и Visual Studio
В этой секции вы узнаете как собрать и интегрировать простую dll с использованием MonoDevelop и Visual Studio, и как подготовить отладочную сессию для этой DLL.
Сначала, откройте MonoDevelop или Visual Studio и создайте новый проект. В MonoDevelop, это делается открытием
и затем выбором . В Visual Studio, вы должны открыть и затем выбрать .Затем нужно заполнить информацию о новой библиотеке:
Далее вы должны добавить ссылки на DLL библиотеки Unity. В MonoDevelop, вы должны открыть контекстное меню для Ссылок в Solution Browser(Браузере Решений) и выбрать
. Теперь выберите опцию . В Visual Studio, откройте контекстное меню для Ссылок в Solution Explorer и выберите . Затем, выберите опцию .На данном этапе, у вас будет возможность выбрать нужный DLL файл. В Mac OSX, файл можно найти в
Applications/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll
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 файл с отладочными символами.
<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. В MonoDevelop, скопируйте файл сборки <project folder>/bin/Debug/DLLTest.dll.mdb
в папку Assets/Plugins. В Visual Studio, выполните
Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe
Далее, откройте “Test” скрипт в MonoDevelop. Убедитесь что отладчик Unity включен в меню Tools (Windows) или меню MonoDevelop-Unity (MacOS). Из этого меню вам необходимо следующее
.После завершения настройки, вы сможете производить отладку кода использующего DLL, в Unity как обычно. Смотрите раздел Scripting Tools для получения дополнительно информации об отладке. …а две нужных dll называются UnityEngine.dll и UnityEditor.dll. …а имена dll такие же как на Мак ОС. Здесь опция -r указыват путь к библиотекам, включаемым в построение, в данном случае - Юнити библиотекам. Опция -target указывает какой тип построения требуется,- слово “library” используется для построения dll. Имя исходного файла для компилирования ClassesForDLL.cs (предполагается что этот файл в текущей рабочей папке, но вы можете указать полный путь если нужно). Если все пройдет хорошо результирующий dll файл появится в той же папке, что исходный. … в то время как на Windows, путь
команду в командной строке, передав <project folder>\bin\Debug\DLLTest.pdb
в качестве параметра. Затем скопируйте преобразованный файл <project folder>\bin\Debug\DLLTest.dll.mdb
в Assets/Plugins.