Unity 3D: Используем DLL в Unity

» Раздел: Программирование

Сегодня я хотел бы познакомить вас с темой, которую сам я не очень мог понять, пока не познакомился с UnityVS. А именно - как создавать DLL через студию да так, чтобы Unity не ругался. Обычный способ в нашем случае становится нетривиальным, ибо у Unity свои взгляды на эту тему. Тема простая, но нужная.
Приступим!

Подготовка

Для начала нам необходимо поставить UnityVS. Скачать его можно тут.
После установки не забудьте встроить пакет UnityVS в вашем проект.
Для этого используйте меню в движке: Assets/Import Package/UnityVS.
Так же в настройках проекта (Edit/Preferences.../External Tools) убедитесь, что скрипты будут открываться с помощью UnityVS.

Процесс

Откройте студию.
Щелкнув правой кнопкой по решению выберите пункт Add/New project...
Теперь по обычаю. Выбираем "Class Library" (Библиотека классов), указываем имя и путь.
Путь не должен относиться к папке Assets вашего проекта. Иначе скрипты будут конфликтовать.
Идеальный путь - папка вашего проекта.
Для создаваемой DLL укажите платформу .NET Framework 3.5 (сейчас это нужно лишь для того, чтобы потом не пришлось удалять ссылки на не поддерживаемые библиотеки).
Зайдите в свойства вашего нового проекта (правой кнопкой по проекту - Preference)
Теперь измените вашу платформу на Unity 3.5 .net Subset Base Class Libraries.
Заново откройте свойства, так как после подтверждения окно закроется.
На вкладке Build установите путь для вашей DLL, куда она отправится после компиляции. В качестве папки укажите любую папку в папке Assets вашего проекта.
Если ваша DLL - для редактора, то есть к игре не относится, вы должны поместить ее в папку Assets/Editor/ или другую папку в таком духе.
Сохраните ваши настройки.
Удалите нерабочие ссылки из вашего проекта:
Добавьте ссылку на другие ваши проекты в том же решении если это необходимо (References -> Right click -> Add Reference... -> Project). Однако, это вовсе не нужно имхо, ибо сама суть DLL обычно состоит в том, что она должна жить сама по себе, без этой зависимости с проектом, к которому она относится.
Добавьте стандартные Unity библиотеки.
Стандартные пути в Unity5 для них такие:
UnityEngine: C:\Program Files\Unity\Editor\Data\Managed\UnityEngine.dll
UnityEditor: C:\Program Files\Unity\Editor\Data\Managed\UnityEditor.dll
Для каждой добавленной библиотеки в свойствах укажите Copy Local = false
Однако всё.
Компиляция DLL происходит как обычно в студии принято - вручную.
Отладка производится так же как и с обычными проектами при использовании UnityVS
При необходимости можете включить unsafe mode и работать с указателями. Здесь он прекрасно работает.

Просмотров: 2 571

alexprey #1 - 2 года назад 0
Воу, а я для этих темных дел использовал отдельное решение и для проектов, которые используются в юнити ставил в "On After Build Success Event" скрипт для копирования этой библиотеки в папку "Plugins" внутри юнити проекта, но имхо этот метод круче!) Надо будет таки поставить UnityVS
MF #2 - 2 года назад 0
Два вопроса:
Сканает ли для билда в линуксе (родные юнити длл так и остаются длл)?
Есть способ для моно?
alexprey #3 - 2 года назад 0
MF, тут идет речь про dll управляемого кода, так что на линуксе это тоже будет работать.