Что нового
Ниже представлен обзор ключевых новинок для программистов. Подробности читайте в примечаниях к выпуску.
Избавьтесь от написания шаблонного кода с помощью новых версий пакетов DOTS. Просто замените компоненты собственной разработки на атрибут [GenerateAuthoringComponent], и замените объемные структуры IJobForEach и IJobForEachWithEntity на простую, но не менее производительную Entities.ForEach(), которая теперь использует компилятор Burst и систему задач C#.
Новый атрибут SerializeReference позволяет сериализовать классы C# как ссылки, а не как типы значений. Это означает, что теперь объекты POCO (plain old C# object) могут ссылаться друг но друга, тем самым упрощая код для выражения сложных структур данных, таких как графы и деревья, и управления ими.
Кроме того, атрибут поддерживает хранение полиморфных данных в полях. Например, список типа List <IAnimal>может содержать собак (класс Dog): iAnimal {}) и кошки (класс Cat: Животное {}).
Поля, отмеченные для сериализации как ссылки, теперь могут нативно содержать пустые значения. Раньше сериализация пустого поля всегда приводила к его десериализации с использованием стандартного конструктора того типа.
Сериализация типов, несвойственных Unity, обычно игнорировала полиморфию. Полиморфная сериализация в Unity 2019.3 позволяет сохранять ссылки на объекты, которые раньше не учитывались процессом, и дает возможность более корректно ссылаться на цепочку наследования.
Обычно при входе в игровой режим Unity выполняет две операции: сброс запрограммированных состояний (Domain Reload) и перезагружает сцену. Для этого нужно время, и по мере усложнения проекта вход в игровой режим может становиться все медленнее и медленнее. Вот почему мы вводим настраиваемый режим входа в режим воспроизведения (экспериментальный) в настройках проекта > Редактор > Параметры входа в режим воспроизведения.
Эти параметры позволяют отключить перезагрузку домена или сцены во время входа в игровой режим при отсутствии изменений кода. Судя по результатам тестирования, изменение этих настроек позволяет сэкономить 50-90% времени на итерацию, в зависимости от сложности проекта.
Смотрите документацию, чтобы узнать, как настроить игровой режим, и о том, как правильно изменить скрипты, если вы отключили функцию Domain Reload.
Текущая версия носит статус экспериментальной, и мы ждем ваших отзывов на форуме.
Мы обновили библиотеку PhysX с версии 3.4 до 4.1. Новая версия включает новый алгоритм Temporal Gauss-Seidel, который делает суставы менее восприимчивыми к излишнему растяжению и предотвращает некоторые неполадки, возникавшие ранее в процессе симуляции. Чтобы включить новый решатель, перейдите в Настройки проекта > Физика.
Мы также сделали доступным новый широкофазный алгоритм Automatic Box Pruning, который автоматически вычисляет границы окружения и количество дроблений. Это улучшение предыдущего алгоритма Multi-Box Pruning.
Кроме того, для персональных компьютеров доступен ускоренный среднефазный алгоритм проверки столкновений. Он не требует ресурсоемких ускоряющих структур для сборки (как R-Tree), что полезно для контента, создаваемого во время работы приложения, так как сокращается время на создание экземпляров MeshCollider.
Мы также добавили новый API для отложенного запекания трехмерной геометрии для MeshCollider. Требовательный к вычислительной мощности процесс запекания трехмерной геометрии теперь можно замаскировать экраном загрузки или переходными сценами, например, сценой диалога в приключенческой игре. Это потоково-безопасный API, поэтому функцию можно вызывать вне главного потока, в том числе через систему задач C#, для одновременного запекания нескольких мешей одновременно.
До Unity 2019.3 при изучении производительности в окне Profiler разработчик мог анализировать данные профиля лишь по 300 кадрам за один раз. Иногда из-за этого не получалось поймать действительно важные кадры.
Настройка количества кадров позволяет увеличить область анализа. В окне Preferences можно задать количество кадров (от 300 до 2000), информация о которых будет отображаться в окне Profiler.
Отслеживание и анализ управляемых распределений — это важная функция профайлера Unity.
Постоянное управляемое распределение приводит к срабатыванию систем сбора мусора и ухудшает производительность игры, вызывая задержки на несколько кадров. Информация о моментах вызова распределения памяти, а также об их источниках в коде очень важна в разработке игр на Unity.
В Unity 2019.3 мы реализовали стеки вызовов для управляемых распределений в проигрывателях. Это позволяет во время профилирования проигрывателей отследить функцию C#, от которой исходит вызов сборщика мусора.
Функцию можно включить с помощью переключателя Call Stacks.
Unity 2019.3 также включает переработанную поддержку систем управления версиями.
Сюда относится повышение удобства и улучшения интеграции, а также исправления для интеграции Perforce, например, автоматические попытки переподключения при потере соединения с Perforce.
Теперь, помимо прочих улучшений, над окном Inspector появилась панель Version Control с дополнительными элементами для добавления, блокировки, разблокировки и передачи изменений.
Кроме того, в окне Inspector для непроверенных ассетов можно щелкнуть правой кнопкой мыши и скопировать выключенные поля Inspector.
Подробности обо всех изменениях интерфейса и исправлениях читайте в примечаниях к выпуску.
В этот выпуск включена новая система адресуемых ассетов (Addressable Asset System, Addressables) — удобный способ адресной загрузки ассетов, одновременно снижающий потребление ресурсов системой управления ассетов путем упрощения процессов создания и развертывания пакетов контента. Говоря проще, Addressables помогает вашей команде эффективно управлять сложным контентом на лету.
FPS Netcode, использованный в примере проекта на DOTS, создан на основе нового стека и упрощает разработку сетевой игры с аналогичной архитектурой. Это решение имеет функции прогнозирования на стороне клиента, управляющего сервера, интерполяции и компенсации задержек.
Вводную информацию об FPS NetCode можно получить из доклада Тима Йоханссона на Unite.