Hero background image
Unity 2019.3 release

Новые функции и обновления инструментария для программистов

Узнайте о новинках Unity 2019.3 для программистов, включая крупные обновления DOTS, улучшенную систему управления версиями, а также настраиваемый вход в игровой режим, улучшения сериализации, обновления физики и многое другое.

Что нового

Ниже представлен обзор ключевых новинок для программистов. Подробности читайте в примечаниях к выпуску.

Обновление игрового кода DOTS

Избавьтесь от написания шаблонного кода с помощью новых версий пакетов DOTS. Просто замените компоненты собственной разработки на атрибут [GenerateAuthoringComponent], и замените объемные структуры IJobForEach и IJobForEachWithEntity на простую, но не менее производительную Entities.ForEach(), которая теперь использует компилятор Burst и систему задач C#.

Чтобы перейти на новые способы программирования на базе DOTS, установите пакет Entities (предварительная версия) из менеджера пакетов.

Улучшения сериализации

Новый атрибут SerializeReference позволяет сериализовать классы C# как ссылки, а не как типы значений. Это означает, что теперь объекты POCO (plain old C# object) могут ссылаться друг но друга, тем самым упрощая код для выражения сложных структур данных, таких как графы и деревья, и управления ими.

Кроме того, атрибут поддерживает хранение полиморфных данных в полях. Например, список типа List <IAnimal>может содержать собак (класс Dog): iAnimal {}) и кошки (класс Cat: Животное {}).

Поля, отмеченные для сериализации как ссылки, теперь могут нативно содержать пустые значения. Раньше сериализация пустого поля всегда приводила к его десериализации с использованием стандартного конструктора того типа.

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

Ускоренная итерация благодаря настройкам входа в игровой режим
Ускоренная итерация благодаря настройкам входа в игровой режим

Обычно при входе в игровой режим Unity выполняет две операции: сброс запрограммированных состояний (Domain Reload) и перезагружает сцену. Для этого нужно время, и по мере усложнения проекта вход в игровой режим может становиться все медленнее и медленнее. Вот почему мы вводим настраиваемый режим входа в режим воспроизведения (экспериментальный) в настройках проекта > Редактор > Параметры входа в режим воспроизведения.

Эти параметры позволяют отключить перезагрузку домена или сцены во время входа в игровой режим при отсутствии изменений кода. Судя по результатам тестирования, изменение этих настроек позволяет сэкономить 50-90% времени на итерацию, в зависимости от сложности проекта.

Смотрите документацию, чтобы узнать, как настроить игровой режим, и о том, как правильно изменить скрипты, если вы отключили функцию Domain Reload.

Эта функция также доступна через API и обратный вызов, если вам нужно перезагрузить состояние игры перед входом в игровой режим.

Текущая версия носит статус экспериментальной, и мы ждем ваших отзывов на форуме.

Библиотека PhysX обновлена с версии 3.4 до 4.1
Библиотека PhysX обновлена с версии 3.4 до 4.1

Мы обновили библиотеку PhysX с версии 3.4 до 4.1. Новая версия включает новый алгоритм Temporal Gauss-Seidel, который делает суставы менее восприимчивыми к излишнему растяжению и предотвращает некоторые неполадки, возникавшие ранее в процессе симуляции. Чтобы включить новый решатель, перейдите в Настройки проекта > Физика.

Мы также сделали доступным новый широкофазный алгоритм Automatic Box Pruning, который автоматически вычисляет границы окружения и количество дроблений. Это улучшение предыдущего алгоритма Multi-Box Pruning.

Кроме того, для персональных компьютеров доступен ускоренный среднефазный алгоритм проверки столкновений. Он не требует ресурсоемких ускоряющих структур для сборки (как R-Tree), что полезно для контента, создаваемого во время работы приложения, так как сокращается время на создание экземпляров MeshCollider.

Мы также добавили новый API для отложенного запекания трехмерной геометрии для MeshCollider. Требовательный к вычислительной мощности процесс запекания трехмерной геометрии теперь можно замаскировать экраном загрузки или переходными сценами, например, сценой диалога в приключенческой игре. Это потоково-безопасный API, поэтому функцию можно вызывать вне главного потока, в том числе через систему задач C#, для одновременного запекания нескольких мешей одновременно.

Подробные сведения смотрите в разделе «Переход с PhysX SDK 3.4 на 4.0» в руководстве к PhysX 4.1 SDK от NVIDIA.

Улучшение профилировщика: Настраиваемое количество кадров
Улучшение профилировщика: Настраиваемое количество кадров

До Unity 2019.3 при изучении производительности в окне Profiler разработчик мог анализировать данные профиля лишь по 300 кадрам за один раз. Иногда из-за этого не получалось поймать действительно важные кадры.

Настройка количества кадров позволяет увеличить область анализа. В окне Preferences можно задать количество кадров (от 300 до 2000), информация о которых будет отображаться в окне Profiler.

Улучшение профилировщика: Поддержка глубокого профиля в плеерах
Улучшение профилировщика: Поддержка глубокого профиля в плеерах
Улучшение профилировщика: Поддержка стеков вызовов с управляемым распределением в Players
Улучшение профилировщика: Поддержка стеков вызовов с управляемым распределением в Players

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

В Unity 2019.3 мы реализовали стеки вызовов для управляемых распределений в проигрывателях. Это позволяет во время профилирования проигрывателей отследить функцию C#, от которой исходит вызов сборщика мусора.

Функцию можно включить с помощью переключателя Call Stacks.

Улучшения управления версиями

Unity 2019.3 также включает переработанную поддержку систем управления версиями.

Сюда относится повышение удобства и улучшения интеграции, а также исправления для интеграции Perforce, например, автоматические попытки переподключения при потере соединения с Perforce.

Теперь, помимо прочих улучшений, над окном Inspector появилась панель Version Control с дополнительными элементами для добавления, блокировки, разблокировки и передачи изменений.

Кроме того, в окне Inspector для непроверенных ассетов можно щелкнуть правой кнопкой мыши и скопировать выключенные поля Inspector.

Подробности обо всех изменениях интерфейса и исправлениях читайте в примечаниях к выпуску.

Адресуемые ресурсы
Адресуемые ресурсы

В этот выпуск включена новая система адресуемых ассетов (Addressable Asset System, Addressables) — удобный способ адресной загрузки ассетов, одновременно снижающий потребление ресурсов системой управления ассетов путем упрощения процессов создания и развертывания пакетов контента. Говоря проще, Addressables помогает вашей команде эффективно управлять сложным контентом на лету.

Netcode
Netcode

FPS Netcode, использованный в примере проекта на DOTS, создан на основе нового стека и упрощает разработку сетевой игры с аналогичной архитектурой. Это решение имеет функции прогнозирования на стороне клиента, управляющего сервера, интерполяции и компенсации задержек.

Вводную информацию об FPS NetCode можно получить из доклада Тима Йоханссона на Unite.

Загрузить Unity 2019.3 сейчас
Загрузить Unity 2019.3 сейчас

Все это и многое другое доступно уже сегодня.