- PVSM.RU - https://www.pvsm.ru -
Unity — платформа, которая существует довольно давно и постоянно развивается. Однако, работая в ней с несколькими проектами одновременно, все еще можно столкнуться со сложностями в использовании общих исходников (.cs), библиотек (.dll) и остальных ассетов (изображения, звуки, модели, префабы). В этой статье мы расскажем о нашем опыте работы с нативным решением такой проблемы для Unity.
Существует больше одного способа использовать общие ресурсы для разных проектов, но у каждого подхода есть свои плюсы и минусы.
1. Дублирование — «руками» дублируем ресурсы между проектами.
Плюсы:
Минусы:
2. Git submodules [1] — распространение общих ресурсов через внешние подмодули.
Плюсы:
Минусы:
3. NuGet — распространение общих библиотек через NuGet-пакеты.
Плюсы:
Минусы:
4. Unity Package Manager — распространение общих ресурсов через нативное решение для Unity.
Плюсы:
Минусы:
Последний способ имеет больше преимуществ, чем недостатков. Однако он сейчас не очень популярен из-за отсутствия документации, и поэтому мы остановимся на нем подробно.
Unity Package Manager (далее UPM) — инструмент для управления пакетами. Его добавили в Unity 2018.1, и он использовался только для пакетов, которые разрабатывались Unity Technologies. Однако начиная с версии 2018.3 появилась возможность добавления кастомных пакетов.
Интерфейс Unity Package Manager
Пакеты не попадают в исходники проекта (директорию Assets). Они находятся в отдельной директории %projectFolder%/Library/PackageCache
и никак на проект не влияют, их единственное упоминание в исходниках — в файле packages/manifest.json
.
Пакеты в файловой системе проекта
UPM может использовать несколько источников пакетов:
1. Файловая система.
Плюсы:
Минусы:
2. Git-репозиторий.
Плюсы:
Минусы:
3. npm-репозиторий.
Плюсы:
Минусы:
Ниже мы рассмотрим реализацию UPM + npm. Эта связка удобна, поскольку позволяет работать с любыми видами ресурсов и управлять версиями пакетов, а также полностью поддерживает нативный интерфейс UPM.
В качестве npm-репозитория можно использовать Verdaccio [2]. К нему есть подробная документация [3], и для его запуска потребуется буквально пара команд.
Для начала нужно установить node.js [4].
Чтобы создать пакет, необходимо поместить файл package.json
, который будет его описывать, в директорию с содержимым этого пакета. Нужно сделать следующее:
Перейти в директорию проекта, которую хотим сделать пакетом.
Выполнить команду npm init и во время диалога ввести необходимые значения. Для name указываем имя в формате реверс домена, например com.plarium.somepackage.
Для удобного отображения имени пакета — добавить свойство displayName в package.json и заполнить его.
Так как npm js-ориентирован, в файле есть не нужные нам свойства main и scripts, которые Unity не использует. Лучше их удалить, чтобы не засорять описание пакета. Файл должен выглядеть примерно так:
{
"name": "com.plarium.somepackage",
"displayName": "Some Package",
"version": "1.0.0",
"description": "Some Package Description",
"keywords": [
"Unity",
"UPM"
],
"author": "AUTHOR",
"license": "UNLICENSED"
}
Для отправки пакета необходимо выполнить команду: npm publish --registry *адрес до хранилища пакетов*
.
Чтобы добавить пакет в Unity-проект, нужно:
manifest.json
информацию об источнике пакетов. Для этого необходимо добавить свойство scopedRegistries
и указать скоупы и адрес источника, по которому будут искаться конкретные скоупы.
"scopedRegistries": [
{
"name": "Main",
"url": "адрес до хранилища пакетов",
"scopes": [
"com.plarium"
]
}
]
Чтобы исходники подключились к проекту, необходимо создать Assembly Definition [5] для пакета.
Использование пакетов не ограничивает возможности для отладки. Однако при работе с пакетами в Unity нельзя перейти в IDE по клику на ошибку в консоли, если ошибка произошла в пакете. Это связано с тем, что Unity не видит скрипты как отдельные файлы, поскольку при использовании Assembly Definition они собираются в библиотеку и подключаются к проекту. При работе с исходниками из проекта переход в IDE по клику доступен.
Скрипт в проекте с подключенным пакетом:
Скрипт из пакета с работающим брейкпоинтом:
Добавленные в проект пакеты Unity открыты только для чтения, но их можно редактировать в кэше пакетов. Для этого необходимо:
package.json
.npm publish --registry *адрес до хранилища пакетов*
.При импорте пакетов могут произойти следующие конфликты GUID’ов:
Если перенести ассет из проекта в пакет при открытой Unity, то его функциональность сохранится, а ссылки в зависимых ассетах начнут использовать ассет из пакета.
Важно: при копировании ассета из проекта в пакет произойдет конфликт «Пакет — проект», описанный в разделе выше.
UPM — новое решение для распространения общих ресурсов на Unity, которое может стать достойной альтернативой существующим методам. Рекомендации, описанные в статье, возникли на основе реальных кейсов. Надеемся, они вам пригодятся.
Автор: Plarium
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/312720
Ссылки в тексте:
[1] Git submodules: https://git-scm.com/book/ru/v1/%D0%98%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B-Git-%D0%9F%D0%BE%D0%B4%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B8
[2] Verdaccio: https://verdaccio.org/
[3] документация: https://verdaccio.org/docs/en/what-is-verdaccio.html
[4] node.js: https://nodejs.org/en/
[5] Assembly Definition: https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html
[6] Источник: https://habr.com/ru/post/445432/?utm_campaign=445432
Нажмите здесь для печати.