Обычно скрипт в проекте содержится как файл исходного текста и компилируется Юнити при изменении. Однако также возможно компилировать скрипт в динамически связываемую библиотеку (dll) используя внешний компилятор. Результирующая dll может быть затем добавлена к проекту, а содержащиеся в ней классы прикреплены к объекту как обычные скрипты.
It is generally much easier to work with scripts than DLLs in Unity. However, you may have access to third party Mono code which is supplied in the form of a DLL. When developing your own code, you may be able to use compilers not supported by Unity by compiling the code to a DLL and adding it to your Unity project. You may also want to supply Unity code without the source (for example, for an Asset Store product) and a DLL is an easy way to do this.
Для создания dll вам нужен сначала подходящий компилятор. Не все компиляторы, которые производят .NET код гарантированно работают с Юнити, так что стоит проверить компилятор с каким-то доступным кодом, прежде чем делать значительную работу с ним. Если dll не содержит код, обращающийся к АПИ Юнити,- вы можете просто скомпилировать его в dll используя соответствующие опции компилятора. Если вы хотите использовать АПИ Юнити, вам нужно сделать dll движка Юнити доступными для компилятора. На Мак они содержатся в пакете приложения (вы можете увидеть внутреннюю структуру пакета командой Показать содержимое Пакета (Show Package Contents) из контекстного меню - правым щелчком или Ctrl-click на приложении Юнити):-
Путь к dll Юнити обычно такой
/Applications/Unity/Unity.app/Contents/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/Managed/UnityEngine.dll -target:library ClassesForDLL.cs
Здесь опция -r указыват путь к библиотекам, включаемым в построение, в данном случае - Юнити библиотекам. Опция -target указывает какой тип построения требуется,- слово “library” используется для построения dll. Имя исходного файла для компилирования ClassesForDLL.cs (предполагается что этот файл в текущей рабочей папке, но вы можете указать полный путь если нужно). Если все пройдет хорошо результирующий dll файл появится в той же папке, что исходный.
После компиляции dll файл может быт просто перетащен в Юнити проект как и любой другой ассет. Dll ассет имеет треугольник раскрывающий содержимое файла для выбора отдельного класса внутри библиотеки. Классы, которые были унаследованы от MonoBehaviour могут быть перетащены на ГеймОбъект как обычные скрипты. Не MonoBehaviour классы могут быт использованы прямо из других скриптов обычным путем.
This section explains how to build and integrate a simple DLL example with Visual Studio, and also how to prepare a debugging session for the DLL.
First, open Visual Studio and create a new project. In Visual Studio, you should select File > New > Project and then choose Visual C# > Class Library.
Затем нужно заполнить информацию о новой библиотеке:
Next, you should add references to the Unity DLLs. In Visual Studio, open the contextual menu for References in the Solution Explorer and choose Add Reference. Then, choose the option Browse > Browse > select file.
At this stage, you will have the option to select the required DLL file. On Mac OS X, the file path is:
Applications/Unity.app/Contents/Managed/UnityEngine.dll
On Windows, the path is:
Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
For this example, rename the class to MyUtilities
in the Solution browser and replace its code with the following:
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 файл с отладочными символами.
For this example, create a new project in Unity and copy the built file <project folder>/bin/Debug/DLLTest.dll into the Assets folder. Then, create a C# script called “Test” in Assets, and replace its contents with the following code:
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 в окне консоли.
Firstly, you should prepare the debug symbols for the DLL. In Visual Studio, execute in the command prompt, passing <project folder>\bin\Debug\DLLTest.pdb as a parameter:
Program Files\Unity\Editor\Data\Mono\lib\mono\2.0\pdb2mdb.exe
Then, copy the converted file <project folder>\bin\Debug\DLLTest.dll.mdb into Assets/Plugins.
После завершения настройки, вы сможете производить отладку кода использующего DLL, в Unity как обычно. Смотрите раздел Scripting Tools для получения дополнительно информации об отладке.
You can enable support for compiling ‘unsafe’ C# code in Unity. To do this, go to Edit > Project Settings > Player and expand the Other Settings tab to reveal the Allow ‘unsafe’ Code checkbox.
2018–03–20 Page amended with limited editorial review
MonoDevelop replaced by Visual Studio from 2018.1
‘unsafe C# Code checkbox’ added in 2018.1