Выпуск Unity 2019.3

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

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

Что нового

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

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

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

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

DOTS_game_code_update.cs (C#)
using System;
using System.Collections;
using System.Collections.Generic;
using Unity.Entities;
using Unity.Jobs;
using Unity.Sample.Core;
using Unity.Transforms;
using UnityEngine;
[GenerateAuthoringComponent]
struct Velocity : IComponentData
{
	public float value;
}
class ApplyVelocitySystem : JobComponentSystem
{
	protected override JobHandle OnUpdate(JobHandle inputDeps)
	{
		float deltaTime = Time.deltaTime;
		return Entities.ForEach((ref Translation translation, in Velocity velocity) =>
		{
			translation.Value += velocity.Value * deltaTime;
		}).Schedule(inputDeps);
	}
}
Узнать больше

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

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

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

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

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

Serialization_improvements.cs (C#)
using System;
using System.Collections.Generic;
using UnityEngine;

public interface IShape {}
[Serializable]
public class Cube : IShape
{
    public Vector3 size;
}
[ExecuteInEditMode]
public class BuildingBlocks : MonoBehaviour
{
    [SerializeReference]
    public List<IShape> inventory;
   void OnEnable()
    {
        if (inventory == null)
        {
            inventory = new List<IShape>()
            {
                new Cube() {size = new Vector3(1.0f, 1.0f, 1.0f)}
            };
            Debug.Log("Created list");
        }
        else
            Debug.Log("Read list");
    }
}
Подробнее

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

Обычно при входе в игровой режим Unity выполняет две операции: сброс запрограммированных состояний (Domain Reload) и перезагружает сцену. Для этого нужно время, и по мере усложнения проекта вход в игровой режим может становиться все медленнее и медленнее. Поэтому мы представляем настройки входа в игровой режим (экспериментальная функция) по адресу Project Settings > Editor > Enter Play Mode options

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

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

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

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

Узнать больше

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

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

Мы также сделали доступным новый широкофазный алгоритм 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.

Узнать больше

Улучшения профайлера: поддержка Deep Profile в проигрывателях

С этим обновлением вводится поддержка Deep Profiling для всех проигрывателей в окне Build Window или в BuildPlayer API.

Создавая сборку приложения с поддержкой Deep Profile, вы можете фиксировать время входа и выхода методов C#. Но поскольку такое средство для C# увеличит потребление ресурсов, мы добавили возможность отключать эту функцию для каждого проигрывателя по отдельности.

Узнать больше

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

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

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

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

Узнать больше

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

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

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

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

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

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

Смотрите примечания к выпуску

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

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

Начать

Netcode

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

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

Узнать больше

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

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

Мы используем cookie-файлы, чтобы вам было удобнее работать с нашим веб-сайтом. Подробнее об этом можно узнать на странице, посвященной политике использования cookie-файлов.

Согласен