Version: 5.3 (switch to 5.4b)
Список ID классов YAML
Изменение исходных ассетов из кода

Cache Server (только для Team лицензии)

В Unity есть полностью автоматизированный конвейер ассетов. Где бы исходный ассет (типа файлов .psd или .fbx) не был изменён, Unity определит изменение и автоматически переимпортирует его. Импортированные из файла данные далее хранятся Unity в своём собственном внутреннем формате.

Такая схема используется для создания наиболее эффективного и гибкого рабочего процесса для каждого пользователя. Однако когда вы работаете в команде, вы заметите, что другие пользователи могут совершать изменения в ассетах и для всех их этот ассет должен быть снова импортирован. Кроме того, ассеты должны быть переимпортированы, когда вы переключаетесь между настольной и мобильной целевыми платформами. Следовательно, переключение может занять длительное время на больших проектах.

Время, необходимое для повторного импорта ассетов может быть значительно сокращено с помощью кэширования данных импортированного ассета в Cache Server.

Импорт каждого ассета кэшируется на основании

  • Самого файла ассета
  • Настроек импорта
  • Версии импортера ассетов
  • Текущей платформы

Если изменится что-либо из перечисленного выше, ассет будет переимпортирован, иначе он будет скачан с Cache Server’а.

Когда вы включаете cache server в настройках, вы даже можете сделать результаты импорта ассетов доступными на разных машинах (например, работу по импорту выполнить на одной машине, и поделиться результатами с остальными).

Учтите, что после настройки cache server этот процесс становится полностью автоматическим, то есть, рабочий процесс не требует дополнительных изменений. Это просто снизит время, требуемое для импортирования проекта без вмешательства в ваш рабочий процесс.

Как настроить Cache Server (пользователь)

Настройка Cache Server очень проста. Всё, что вам следует сделать - установить флажок Use Cache Server в настройках и указать редактору Unity локальной машины где находится Cache Server.

Найти этот флажок можно в Unity->Preferences на Mac или в Edit->Preferences на PC.

Если вы разместили Cache Server на вашей локальной машине, укажите localhost в качестве адреса сервера. Однако из-за ограничений дискового пространства, рекомендуется размещать Cache Server на отдельной машине.

Как настроить Cache Server (пользователь)

Администраторам следует настроить Cache Server машину, на которой будут храниться кэшированные ассеты.

Вам следует:

  • Купить Cache Server (в качестве части Team License) в онлайн магазине.
  • Скачать Cache Server. Перейти на страницу Unity Team License и нажать на кнопку для скачивания (Download) Cache Server.
  • Разархивируйте файл и вы увидите что-то вроде этого:
  • В зависимости от вашей ОС, запустите соответствующий командный скрипт.
  • Вы увидите консольное окно, сообщающее о том, что Cache Server запущен и работает в фоновом режиме

Cache Server должен размещаться на надёжной машине с очень большим объёмом свободного дискового пространства (намного больше, чем размер самого проекта, т.к. там будет храниться несколько версий импортированных ресурсов). После заполнения диска, Cache Server может работать медленней.

Установка Cache Server в виде сервиса

Предоставленные .sh и .cmd скрипты должны быть установлены в качестве сервиса на сервере. Cache server может быть безопасно завершён и перезапущен в любое время, т.к. он использует атомарные файловые операции.

Настройка 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.

Требования к машине, на которой размещён Cache Server

Для наилучшей производительности, на машине должно быть достаточно 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 FAQ

Будет ли размер базы моего Cache Server бесконечно расти по мере импорта и хранения все большего числа ресурсов?

Cache Server автоматически удаляет ассеты, которые не использовались какое-то время (конечно, если эти ассеты вновь потребуются, они будут созданы заново при следующем использовании).

Cache server работает только с asset server?

Работа cache server’а прозрачна для систем контроля версий и исходников, так что вы не ограничены в использовании только Unity asset server’а.

Какие изменения приведут к повторной перегенерации импортированного файла?

При импортировании ассета, Unity генерирует MD5 хэш всех исходных данных.

Для текстуры это:

  • Исходный ассет: файл “myTexture.psd”
  • Мета-файл: “myTexture.psd.meta” (содержит все настройки импортера)
  • Номер внутренней версии импортера текстуры
  • Хэш номеров версий всех AssetPostprocessor’ов

Если этот хэш не совпадет с тем, что хранится в 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 проект.

Список ID классов YAML
Изменение исходных ассетов из кода