Обновляем Unity: как апгрейднуть редактор и стоит ли это делать


Обновить Unity можно, если делать это правильно. Обновление подобных инструментов всегда несет в себе что-то новое. Это могут быть какие-то новые инструменты или функции, но чаще всего в обновлениях закрывают «дыры» и уязвимости, которые могут навредить разрабатываемым проектам.
Команда разработчиков Unity регулярно выпускает новые обновления своей линейке инструментов. Неважно , чем пользуетесь вы , главное — всегда вовремя обновить свой продукт Unity.
Что такое Unity

Unity давно перестал быть просто игровым движком. Он стал работать и в других нишах, например , проекты на Unity можно создавать:
- проектируя автотранспорт или отдельные модули автомобилей;
- разрабатывая сцены для кинематографа или анимационных фильмов;
- для архитектуры и строительства.
Но основное направлени е так и остается за разработкой и сопровождением компьютерных игр от идеи и до релиза рабочего проекта.
Движок Unity давно перерос в полноценную экосистему, которая создана для того , чтобы разработка на этом инструменте была максимально комфортной и качественной. «Вокруг» Unity построены:
- онлайн-школы для обучения молодых специалистов;
- магазин готовых шаблонов и бесплатных инструментов;
- качественная документация о всех новых функциях и процессах Unity;
- большое сообщество, которое всегда готово прийти на помощь;
- игровые сервисы, где вы можете поделит ь ся своим творением;
- и др.
Как обновить Unity

На самом деле , вопрос «обновить или не обновить Unity?» мучает многих разработчиков. С одной стороны , обновить нужно, потому что это принесет какие-то новшества в инструмент и обезопасит будущий проект. Но с другой стороны , обновление чревато нехорошими последствиями, например , весь проект может «слететь» , и придется разрабатывать все заново.
Чтобы обновить Unity , нужно:
- Сохранить разрабатываемый проект отдельно, чтобы на случай его потери у вас были файлы восстановления.
- Удалить старую версию Unity. Можно этого и не делать , а установить параллельно две версии инструмента, но в таком случае править свой проект в новой версии у вас не получится, пока старая не будет удалена и в новой версии не будет указан путь до существующего проекта. Две версии обычно ставят для того, чтобы оценить возможности нового инструмента и окончательно решить , обновить свой Unity или нет.
- Установить новую версию вместо старой, заново залогиниться в новой версии и указать путь до своего проекта.
На этом обновление Unity оканчивается. Однако, если у вас на старой версии были установлены какие-то дополнительные платформы, их повторное скачивание и переустановка также обязательны. Например , в старой версии у вас был а установлена поддержка сборки на Android или Windows. Эти дополнительные инструменты нужно будет заново переустанавливать, иначе ваш проект не будет работать.
При установк е можно не удалять старую версию, а просто указать старый путь установки новой версии Unity, которая самостоятельно удалит «своего предшественника».
Разрабатывая какой-либо масштабный проект на Unity , пользователи редко задумываются об обновлении этого инструмента в процессе разработки, поэтому отключают оповещения об обновлениях. Потом, когда вспоминают, что нужно обновить Unity, перед ними будет стоять выбор , на какую версию обновить, потому что их может быть несколько. Опытные пользователи Unity не рекомендуют обновлять движок до «самой последней версии», потому что такие версии обычно сопровождаются «сырым» состоянием и наличием собственных багов, которые будут только исправляться в будущем. Поэтому лучше обновлять на предыдущую версию до «самой новой», которая уже проверена и обросла патчами, закрывающими ее проблемы. Кстати, перед тем как обновить Unity, новую версию этого инструмента нужно скачать с официального сайта.
Заключение
Обновить или не обновить Unity? Однозначно обновлять нужно, но лучше это делать после завершения разрабатываемого проекта. В этом случае нет риска, что с вашим проектом что-то пойдет не так, а значит , вы сохраните свои нервы и время.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
Любое творчество начинается с Unity Hub
Установите Unity Hub, чтобы работать эффективнее. Создавайте и открывайте проекты в редакторе Unity, используйте ресурсы и реализуйте идеи быстрее.
Мощные инструменты в ваших руках
В Unity Hub можно создавать проекты по проверенным шаблонам. Вы также можете управлять проектами и версиями редактора. В новом интерфейсе можно настраивать рабочий процесс, обмениваться ресурсами, взаимодействовать с командой и не только!


Загрузить шаблон Runner
Новый шаблон Runner от Unity упрощает создание уникальных и высококачественных игр в популярном жанре. Ускорьте итерации и прототипирование, чтобы выделить больше времени улучшению своей игры.
Интегрируйте DevOps со своим проектом Unity Cloud
Создавайте и привязывайте репозитории Unity Version Control к новым проектам, сравнивайте источники файлов, а также связывайте репозитории с существующими локальными проектами в Unity Hub, чтобы ускорить итерацию и совместную работу.

Что делать в Unity Hub?
Ознакомьтесь с основными функциями Unity Hub.
Подключайте и активируйте лицензии
Unity Hub — это простейший способ активации лицензий и управления учетной записью. Войдите в учетную запись с помощью безопасной веб-аутентификации или SSO для постоянного доступа к проектам и необходимым для них инструментам.
Быстрый запуск проектов
Создавайте новые проекты на основе шаблонов или учебных проектов. Выбирайте удобный вам шаблон из растущего списка — Core, Sample или Learning для 2D, 3D, VR, AR, мобильных игр, микроигр и других приложений. Создавайте и привязывайте репозитории Version Control, чтобы отслеживать изменения проекта с течением времени.
Организовывайте работу и сотрудничество
Храните все проекты в едином безопасном месте. Unity Hub упрощает управление, обновление и запуск проектов как для сотрудников студий, так и для независимых разработчиков. Пригласите двух друзей и работайте в Version Control бесплатно.
Загружайте и управляйте установленными версиями
Загрузите и установите редактор Unity в версии LTS (выпуск с долгосрочной поддержкой) или Tech Stream (предварительный выпуск) с помощью Unity Hub. Устанавливайте любые итерации и запускайте проекты в разных версиях для максимально эффективного использования платформы.
Продолжайте обучение
Настраивайте траекторию обучения по своему усмотрению. Изучайте материалы и статьи по интересующим вас темам. Зарабатывайте значки, формируйте навыки и развивайтесь в роли разработчика Unity.
Присоединяйтесь к сообществу
Пользуйтесь ресурсами и следите за деятельностью других разработчиков в Unity. Обсуждайте проблемы и решения с коллегами на форуме, пользуйтесь онлайн-поддержкой, читайте статьи в блоге и следите за новостями.
Раскройте свои творческие способности
Загрузите самую популярную в мире платформу разработки для создания многоплатформенных 2D- и 3D-игр и интерактивного контента.
Три этапа разработки на Unity
1. 1. Загрузите Unity Hub
Выполните установку и настройку согласно инструкциям на экране.
2. 2. Выберите версию Unity
Установите последний, один из предыдущих выпусков или бета-версию Unity с новейшими разрабатываемыми функциями.
3. 3. Создайте проект
Творите с чистого листа или выберите шаблон для ускоренной разработки проекта. Смотрите обучающие ролики различных уровней, чтобы без проблем воплотить свои идеи в жизнь.

Системные требования Unity Hub
ОС: Windows 7 SP1+, 8, 10, только 64-разрядные версии; Mac OS X 10.13+; Ubuntu 16.04, 18.04; CentOS 7.
Графический процессор: Видеокарта с поддержкой DX10 (версия шейдеров 4.0).
Что такое Unity Hub?
Unity Hub позволяет управлять установленными версиями редактора Unity, создавать новые проекты и использовать уже готовые.
![]()
Упростите себе работу
Unity Hub включает увлекательные траектории обучения, которые помогут новичкам влиться в творческий процесс.

Загрузить шаблон Runner
Новый шаблон Runner от Unity упрощает создание ваших уникальных и высококачественных игр в популярном жанре, которые будут по-настоящему выделяться в магазинах приложений.

Настройте его с Creative Mods
Работайте над играми с задором и удовольствием. Решая небольшие головоломки, которые мы называем Creative Mods, вы сможете с легкостью реализовать свой уникальный стиль и идеи в игре.

Поделитесь готовой игрой
Демонстрируйте навыки и получайте быстрые отзывы. Всего несколько действий отделяют вас от публикации интерактивной версии вашей игры в браузере!
Планы и цены
Мы предлагаем множество тарифов для самых разных отраслей и уровня знаний.
Ни один из них не требует от вас авторских отчислений.
Версии
Просмотрите и загрузите разные версии Unity.

Выпуски Unity с долгосрочной поддержкой (LTS)
Версия для разработчиков, которым нужна максимальная стабильность и поддержка проектов. В выпуске с долгосрочной поддержкой объединены все функции и улучшения, выпущенные за год. Эта версия устанавливается по умолчанию. Как правило, она рекомендуется для этапа, когда можно остановиться на конкретном выпуске Unity.

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

Тестируемые технологии
Получите доступ к нашей новейшей функциональности раньше всех. Ваши отзывы помогут нам повысить ее качество.
Использование .NET 4.x в Unity
C# и .NET, технологии, лежащие в основе базовых сценариев Unity, получают обновления с тех пор, как корпорация Майкрософт выпустила их в 2002 году. Но разработчики Unity могут не знать устойчивый поток новых функций, добавленных на язык C# и платформа .NET Framework, так как до Unity 2017.1 Unity использовал среду выполнения сценариев .NET 3.5, отсутствующие годы обновлений.
В выпуске Unity 2017.1 Unity представила экспериментальную версию среды выполнения сценариев, обновленную до совместимой версии .NET 4.6, C# 6.0. В Unity 2018.1 аналогичная среда выполнения .NET 4.x уже не считается экспериментальный, а вот более ранняя аналогичная среда выполнения .NET 3.5 теперь считается устаревшей. В выпуске Unity 2018.3 Unity проектируется для создания обновленной среды выполнения скриптов по умолчанию и обновления до C# 7. Дополнительные сведения и последние обновления на этой дорожной карте см. в записи блога Unity или посетите форум по предварительной версии экспериментальных сценариев. А пока прочтите следующие разделы этой статьи и узнайте о новых функциях, появившихся в среде выполнения сценариев .NET 4.x.
Необходимые компоненты
- Unity 2022.2 или более поздней версии (рекомендуется 2022.1.7)
- Visual Studio 2019
Включение среды выполнения сценариев .NET 4.x в Unity
Чтобы включить среду выполнения сценариев .NET 4.x, выполните следующие действия.
- Откройте проигрыватель Параметры в инспекторе Unity, выбрав изменить > проект Параметры > проигрывателя > другие Параметры.
- В разделе «Конфигурация» щелкните раскрывающийся список уровня совместимости API и выберите платформа .NET Framework. Вам будет предложено перезапустить Unity.

Выбор профилей .NET 4.x и .NET Standard 2.1
После перехода на эквивалентную среду выполнения сценариев .NET 4.x можно указать уровень совместимости API с помощью раскрывающегося меню проигрывателя Параметры (изменение > проекта Параметры > проигрывателя). Существует два варианта.
- .NET Standard 2.1. Этот профиль соответствует профилю .NET Standard 2.1, опубликованному .NET Foundation. Unity рекомендует .NET Standard 2.1 для новых проектов. Эта версия ниже, чем .NET 4.x, что полезно для платформ ограниченного размера. Кроме того, Unity обеспечивает поддержку этого профиля на всех поддерживаемых Unity платформах.
- платформа .NET Framework. Этот профиль предоставляет доступ к последней версии API .NET 4. Он включает весь код, доступный в библиотеках классов платформа .NET Framework, а также поддерживает профили .NET Standard 2.1. Выбирайте профиль .NET 4.x, если для вашего проекта требуется та часть API, которая не входит в профиль .NET Standard 2.0. При этом некоторые части этого API могут поддерживаться не на всех платформах Unity.
Дополнительные сведения об этих вариантах см. в этой записи блога Unity.
Добавление ссылок на сборки при использовании уровня совместимости API .NET 4.x
При использовании параметра .NET Standard 2.1 в раскрывающемся списке уровня совместимости API все сборки в профиле API ссылаются и доступны для использования. Однако при использовании более крупного профиля .NET 4.x некоторые сборки, поставляемые с Unity, по умолчанию не ссылаются. Чтобы использовать эти API, необходимо добавить ссылку на сборку вручную. Вы можете просмотреть сборки, которые входят в каталог MonoBleedingEdge/lib/mono вашей установки редактора Unity:

Например, если вы используете профиль .NET 4.x и хотите использовать HttpClient , необходимо добавить ссылку на сборку System.Net.Http.dll. Если этого не сделать, компилятор выдаст сообщение об отсутствующей ссылке на сборку:

Visual Studio повторно создает ФАЙЛЫ CSPROJ и SLN для проектов Unity при каждом открытии. В результате нельзя добавлять ссылки на сборки непосредственно в Visual Studio, так как они будут потеряны при повторном открытии проекта. Вместо этого необходимо использовать специальный текстовый файл csc.rsp :
- Создайте текстовый файл csc.rsp в корневом каталоге ресурсов проекта Unity.
- В первой строке пустого текстового файла введите: -r:System.Net.Http.dll , а затем сохраните файл. Вместо System.Net.Http.dll можно указать любую добавленную сборку с отсутствующей ссылкой.
- Перезапустите редактор Unity.
Преимущества совместимости с .NET
Помимо новых возможностей синтаксиса и языка C#, среда выполнения сценариев .NET 4.x предоставляет пользователям Unity доступ к огромной библиотеке пакетов .NET, несовместимых с устаревшей средой выполнения сценариев .NET 3.5.
Добавление пакетов из NuGet в проект Unity
NuGet — это диспетчер пакетов для .NET. NuGet интегрирована в Visual Studio. Однако для проектов Unity требуется специальный процесс добавления пакетов NuGet, так как при открытии проекта в Unity файлы проектов Visual Studio создаются повторно, отменяя необходимые конфигурации. Чтобы добавить пакет из NuGet, в проект Unity:

- Откройте NuGet и найдите совместимый пакет, который вам нужно добавить (.NET Standard 2.0 или .NET 4.x). В этом примере показано добавление Json.NET (популярного пакета для работы с JSON) в проект .NET Standard 2.0.
- Нажмите кнопку Загрузить:
- Найдите загруженный файл и измените его расширение с .nupkg на .zip.
- В ZIP-файле зайдите в каталог lib/netstandard2.0 и скопируйте файл Newtonsoft.Json.dll.
- В папке Assets в корневом каталоге проекта Unity создайте папку с именем Plugins (Подключаемые модули). В Unity «Plugins» — это имя специальной папки. Дополнительные сведения см. в документации по Unity.
- Скопируйте файл Newtonsoft.Json.dll в каталог Plugins проекта Unity.
- Создайте файл link.xml в каталоге ресурсов проекта Unity и добавьте следующий XML-код, чтобы процесс полоски байт-кода Unity не удалял необходимые данные при экспорте на платформу IL2CPP. Несмотря на то что это действие относится только к данной библиотеке, проблемы могут возникнуть и с другими библиотеками, которые используют отражение подобным образом. Дополнительные сведения см . в документации по Unity в этой статье.
Теперь пакет Json.NET готов к работе.
using Newtonsoft.Json; using UnityEngine; public class JSONTest : MonoBehaviour < class Enemy < public string Name < get; set; >public int AttackDamage < get; set; >public int MaxHealth < get; set; >> private void Start() < string json = @"< 'Name': 'Ninja', 'AttackDamage': '40' >"; var enemy = JsonConvert.DeserializeObject(json); Debug.Log($" deals damage."); // Output: // Ninja deals 40 damage. > >
Это простой пример использования библиотеки, которая не имеет зависимостей. Если одни пакеты NuGet зависят от других, необходимо вручную загрузить эти зависимости и добавить их в проект таким же образом.
Новые возможности синтаксиса и языка
С помощью обновленной среды выполнения сценариев разработчики Unity получают доступ к C# 8 и узлу новых функций языка и синтаксиса.
Инициализаторы автосвойств
Синтаксис автосвойств в среде выполнения сценариев Unity .NET 3.5 позволял быстро определить неинициализированные свойства, но саму инициализацию нужно прописывать в сценарии отдельно. В среде выполнения .NET 4.x автосвойства можно инициализировать в той же строке:
// .NET 3.5 public int Health < get; set; >// Health has to be initialized somewhere else, like Start() // .NET 4.x public int Health < get; set; >= 100;
Интерполяция строк
В более ранней среде выполнения .NET 3.5 синтаксис объединения строк был громоздким. В новой среде выполнения .NET 4.x есть функция $ интерполяции строк, которая позволяет вставлять выражения в строки, используя более прямой и удобочитаемый синтаксис:
// .NET 3.5 Debug.Log(String.Format("Player health: ", Health)); // or Debug.Log("Player health: " + Health); // .NET 4.x Debug.Log($"Player health: ");
Элементы, воплощающие выражение
Новый синтаксис C# в среде выполнения .NET 4.x позволяет заменять тело функций на лямбда-выражения и, таким образом, делать их более краткими:
// .NET 3.5 private int TakeDamage(int amount) < return Health -= amount; >// .NET 4.x private int TakeDamage(int amount) => Health -= amount;
Члены, заданные выражениями, теперь можно использовать также в свойствах, доступных только для чтения:
// .NET 4.x public string PlayerHealthUiText => $"Player health: ";
Асинхронный шаблон, основанный на задачах (TAP)
Асинхронное программирование позволяет выполнять длинные операции без зависания приложений. Кроме того, с помощью этой функции можно сделать так, чтобы код, в котором используются результаты ресурсоемких операций, выполнялся только после того, как будут выполнены эти операции, например после загрузки определенного файла или завершения сетевой операции.
В Unity асинхронное программирование обычно выполняется с соподпрограммами. Однако начиная с C# 5 предпочтительным методом асинхронного программирования в среде разработки .NET стал Асинхронный шаблон, основанный на задачах (TAP), с использованием ключевых слов async и await в System.Threading.Task. Таким образом, для функции async можно задать ожидание завершения задачи ( await ) без запрета обновлений в остальной части приложения:
// Unity coroutine using UnityEngine; public class UnityCoroutineExample : MonoBehaviour < private void Start() < StartCoroutine(WaitOneSecond()); DoMoreStuff(); // This executes without waiting for WaitOneSecond >private IEnumerator WaitOneSecond() < yield return new WaitForSeconds(1.0f); Debug.Log("Finished waiting."); >>
// .NET 4.x async-await using UnityEngine; using System.Threading.Tasks; public class AsyncAwaitExample : MonoBehaviour < private async void Start() < Debug.Log("Wait."); await WaitOneSecondAsync(); DoMoreStuff(); // Will not execute until WaitOneSecond has completed >private async Task WaitOneSecondAsync() < await Task.Delay(TimeSpan.FromSeconds(1)); Debug.Log("Finished waiting."); >>
TAP — это сложная тема с определенными характерными для Unity нюансами, которые разработчикам необходимо учитывать, В результате TAP не является универсальной заменой для корутинов в Unity; однако это еще один инструмент для использования. Сфера применения этого компонента выходит за рамки данной статьи, но некоторые общие рекомендации и советы вы найдете ниже.
Начало работы с TAP в Unity
Эти советы помогут вам приступить к работе с TAP в Unity.
- Асинхронные функции, выполнения которых код будет дожидаться, должны иметь тип возвращаемого значения Task или Task .
- К именам асинхронных функций, возвращающих задачу, необходимо добавлять суффикс Async. Суффикс Async означает, что эта функция требует ожидания.
- Используйте тип возвращаемого значения async void только для тех функций, которые запускают асинхронные функции из традиционного синхронного кода. Такие функции не могут ожидать себя и не должны иметь суффикс «Async» в их именах.
- Чтобы асинхронные функции по умолчанию выполнялись в основном потоке, в Unity используется unitySynchronizationContext. API Unity за пределами основного потока недоступен.
- Можно выполнять задачи в фоновых потоках с помощью таких методов, как Task.Run и Task.ConfigureAwait(false) . Этот прием пригодится для выгрузки ресурсоемких операций из основного потока и повышения производительности. При этом использование фоновых потоков может привести к возникновению трудно устраняемых проблем, например привести к состоянию гонки.
- API Unity за пределами основного потока недоступен.
- Задачи, использующие потоки, в сборках Unity WebGL не поддерживаются.
Различия между соподпрограммами и TAP
Между соподпрограммами и TAP (async-await) есть несколько важных различий.
- Корутины не могут возвращать значения, но Task могут.
- Вы не можете поместить yield инструкцию try-catch, что затрудняет обработку ошибок с корутинами. При этом try-catch работает с TAP.
- Функция соподпрограмм в Unity недоступна в классах, которые не являются производными от MonoBehaviour. Для асинхронного программирования в таких классах отлично подходит TAP.
- В настоящее время Unity не предлагает TAP как полную замену соподпрограмм. Узнать результаты применения одного или другого подхода для конкретного проекта можно только путем профилирования.
Оператор nameof
Оператор nameof получает строковое имя, тип или член переменной. В некоторых случаях nameof удобно использовать для регистрации ошибок и получения строкового имени перечисления.
// Get the string name of an enum: enum Difficulty ; private void Start() < Debug.Log(nameof(Difficulty.Easy)); RecordHighScore("John"); // Output: // Easy // playerName >// Validate parameter: private void RecordHighScore(string playerName)
Информационные атрибуты вызывающего объекта
Информационные атрибуты вызывающего объекта содержат информацию о вызывающем объекте метода. Для каждого параметра, который вы хотите использовать c информационным атрибутом вызывающего объекта, необходимо указать значение по умолчанию.
private void Start () < ShowCallerInfo("Something happened."); >public void ShowCallerInfo(string message, [System.Runtime.CompilerServices.CallerMemberName] string memberName = "", [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "", [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0) < Debug.Log($"message: "); Debug.Log($"member name: "); Debug.Log($"source file path: "); Debug.Log($"source line number: "); > // Output: // Something happened // member name: Start // source file path: D:\Documents\unity-scripting-upgrade\Unity Project\Assets\CallerInfoTest.cs // source line number: 10
Директива using static
Директива using static позволяет использовать статические функции, не указывая имя класса. Директива using static помогает сэкономить место и время при использовании нескольких статических функций одного класса.
// .NET 3.5 using UnityEngine; public class Example : MonoBehaviour < private void Start () < Debug.Log(Mathf.RoundToInt(Mathf.PI)); // Output: // 3 >>
// .NET 4.x using UnityEngine; using static UnityEngine.Mathf; public class UsingStaticExample: MonoBehaviour < private void Start () < Debug.Log(RoundToInt(PI)); // Output: // 3 >>
Рекомендации по IL2CPP
При экспорте игры на такие платформы, как iOS, Unity будет использовать его подсистему IL2CPP для транспилирования il в код C++, который затем компилируется с помощью собственного компилятора целевой платформы. В этом сценарии существует несколько функций .NET, которые не поддерживаются, например части Рефлексия и использование dynamic ключевое слово. Хотя вы можете управлять использованием этих функций в собственном коде, вы можете столкнуться с проблемами, используя сторонние библиотеки DLL и пакеты SDK, которые не были написаны с помощью Unity и IL2CPP. Дополнительные сведения об этой статье см . в документации по ограничениям сценариев на сайте Unity.
Кроме того, как уже говорилось в приведенном выше примере Json.NET, во время экспорта IL2CPP Unity попытается удалить неиспользуемый код. Хотя этот процесс обычно не является проблемой, с библиотеками, используюющими Рефлексия ion, он может случайно удалить свойства или методы, которые будут вызываться во время выполнения, которые не могут быть определены во время экспорта. Чтобы устранить эти проблемы, добавьте файл link.xml в проект, содержащий список сборок и пространств имен, для того чтобы не запускать процесс удаления. Дополнительные сведения см . в документации Unity по разделению байтов.
Образец проекта Unity в .NET 4.x
Данный образец содержит примеры использования нескольких функций .NET 4.x. Загрузить проект или просмотреть исходный код можно в GitHub.
Дополнительные ресурсы
- Блог Unity: усовершенствования среды выполнения сценариев в Unity 2018.2
- История C#
- Что нового в C# 6
- Асинхронное программирование в Unity с использованием соподпрограмм и TAP
- Форум Unity: предварительные версии экспериментальных сценариев