В Unity есть полностью автоматизированный конвейер ассетов. Где бы исходный ассет (типа файлов .psd
или .fbx
) не был изменён, Unity определит изменение и автоматически переимпортирует его. Импортированные из файла данные далее хранятся Unity в своём собственном внутреннем формате.
Такая схема используется для создания наиболее эффективного и гибкого рабочего процесса для каждого пользователя. Однако когда вы работаете в команде, вы заметите, что другие пользователи могут совершать изменения в ассетах и для всех их этот ассет должен быть снова импортирован. Кроме того, ассеты должны быть переимпортированы, когда вы переключаетесь между настольной и мобильной целевыми платформами. Следовательно, переключение может занять длительное время на больших проектах.
Время, необходимое для повторного импорта ассетов может быть значительно сокращено с помощью кэширования данных импортированного ассета в Cache Server.
Импорт каждого ассета кэшируется на основании
Если изменится что-либо из перечисленного выше, ассет будет переимпортирован, иначе он будет скачан с Cache Server’а.
Когда вы включаете cache server в настройках, вы даже можете сделать результаты импорта ассетов доступными на разных машинах (например, работу по импорту выполнить на одной машине, и поделиться результатами с остальными).
Учтите, что после настройки cache server этот процесс становится полностью автоматическим, то есть, рабочий процесс не требует дополнительных изменений. Это просто снизит время, требуемое для импортирования проекта без вмешательства в ваш рабочий процесс.
Настройка Cache Server очень проста. Всё, что вам следует сделать - установить флажок Use Cache Server в настройках и указать редактору Unity локальной машины где находится Cache Server.
Найти этот флажок можно в
на Mac или в на PC.Если вы разместили Cache Server на вашей локальной машине, укажите localhost в качестве адреса сервера. Однако из-за ограничений дискового пространства, рекомендуется размещать Cache Server на отдельной машине.
Администраторам следует настроить Cache Server машину, на которой будут храниться кэшированные ассеты.
Вам следует:
Cache Server должен размещаться на надёжной машине с очень большим объёмом свободного дискового пространства (намного больше, чем размер самого проекта, т.к. там будет храниться несколько версий импортированных ресурсов). После заполнения диска, Cache Server может работать медленней.
Предоставленные .sh
и .cmd
скрипты должны быть установлены в качестве сервиса на сервере.
Cache server может быть безопасно завершён и перезапущен в любое время, т.к. он использует атомарные файловые операции.
Если вы просто запустите Cache Server двойным кликом по скрипту, он создаст папку “cache” рядом со скриптом, и будет хранить свои данные в этой папке. Максимально допустимый размер содержимого в этой папке cache - 50 ГБ. Вы можете настроить максимальный размер и расположение данных с помощью опций командной строки, например:
./RunOSX.command --path ~/mycachePath --size 2000000000
or
./RunOSX.command --path ~/mycachePath --port 8199 -nolegacy
You can configure the cache server by using the following command line options:
--port
lets you specify the server port, it only applies to the new cache server, the default value is 8126
.
--path
lets you specify the path of the cache location, it only applies to the new cache server, the default value is ./cache5.0
.
--legacypath
lets you specify the path of the cache location, it only applies to the legacy cache server, the default value is ./cache
.
--size
lets you specify the maximum cache size in bytes for both cache servers. Files that have not been used recently will automatically be discarded when the cache size is exceeded.
--nolegacy
if specify it will NOT start the legacy cache server, otherwise the legacy cache server is started on port 8125
.
Для наилучшей производительности, на машине должно быть достаточно RAM для хранения всей папки импортированного проекта. Кроме того, желательно иметь машину с быстрым жёстким диском и быстрым Ethernet соединением. Также на диске должно быть достаточное количество свободного места. С другой стороны, Cache Server потребляет очень мало CPU ресурсов.
Одно из основных отличий Cache Server от системы контроля версий это то, что закэшированные данные всегда могут быть локально пересобраны. Это просто инструмент для увеличения производительности. По-этому нет смысла использовать Cache Server по сети Internet. Если у вас распределённая команда, вам следует разместить отдельный cache server в каждой локации.
Cache Server должен работать на машине под управлением Linux или MacOS. Файловая система Windows не достаточно хорошо оптимизирована под используемый в Asset Cache Server’е способ хранения данных, и проблемы с блокировкой файлов на Windows могут вызывать проблемы, не возникающие на Linux или Mac OS.
Cache Server автоматически удаляет ассеты, которые не использовались какое-то время (конечно, если эти ассеты вновь потребуются, они будут созданы заново при следующем использовании).
Работа cache server’а прозрачна для систем контроля версий и исходников, так что вы не ограничены в использовании только Unity asset server’а.
При импортировании ассета, Unity генерирует MD5 хэш всех исходных данных.
Для текстуры это:
Если этот хэш не совпадет с тем, что хранится в Cache Server, ассет будет переимпортирован, иначе будет скачана закэшированная версия. Редактор Unity будет выкачивать ассеты с сервера по мере необходимости - ассеты не передаются во все проекты сразу после изменения.
Cache Server не обрабатывает зависимости. Конвейер ассетов Unity не работает с понятием зависимостей. Он построен так, чтобы избегать зависимостей между ассетами. AssetPostprocessor’ы - основной способ настройки импортера ассетов “под себя”. Например, вы могли бы пожелать добавить MeshCollider’ы к некоторым GameObject’ам в файле fbx на основе их имени или тэга.
Кроме того, AssetPostprocessor’ы довольно просто использовать для введения зависимостей. Например, вы могли бы использовать данные из текстового файла рядом с ассетом для добавления дополнительных компонентов к импортированным игровым объектам. Это не поддерживается в Cache Server. Если вы желаете использовать Cache Server, вам придётся удалить зависимости на других ассетах в папке проекта. Так как Cache Server ничего не знает про зависимость в вашем пост-процессоре, он не будет знать о том, что что-то изменилось, таким образом, используя старую закэшированную версию ассета.
На деле, существует множество способов заставить пост-обработку хорошо работать с cache server. Вы можете использовать:
Изменение уже существующих материалов может привести к проблеме. При использовании Cache Server, Unity удостоверяется в обслуживании ссылок на материалы. Но так как ни одно событие пост-обработки не будет вызвано, содержимое материала не может быть изменено, когда модель импортируется через Cache Server.
Существует несколько видов данных ассета, которые не кэшируются сервером. Кеэширование скриптовых файлов ничего нам не даст, потому сервер будет их игнорировать. Кроме того, нативные файлы, используемые программным обеспечением для 3D моделирования (Maya, 3D Max и т.д.) конвертируются в FBX с помощью самого приложения. На сегодняшний день, ассет сервер не кэширует ни нативный файл, ни промежуточный FBX файл, генерируемый в процессе импорта. Однако можно получить выгоду от сервера, экспортируя файлы в FBX из ПО для моделирования и добавляя эти файлы в Unity проект.