Hero background image

Программирование в Unity для опытных программистов

Знакомитесь с Unity, имея знания C++?

Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.

По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.

Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.

Объекты GameObject и компоненты в Unity
Объекты GameObject и компоненты в Unity

Весь игровой процесс и интерактивность, разработанные в Unity, строятся на трех фундаментальных строительных блоках: Игровые объекты, компоненты и переменные.

Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.

Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.

Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.

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

Программирование компонентов в Unity
Демофильм Unity Megacity создан на основе DOTS
Преимущества информационно-ориентированного подхода с DOTS

Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент Rigidbody к объекту GameObject — он начнет падать, добавите компонент Light — GameObject начнет излучать свет. Все остальное также подчиняется этой простой логике.

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

Компоненты и игровые объекты относятся к «тяжелым объектам C++». Все объекты GameObject имеют имя. Их компоненты представляют собой оболочки для C# поверх компонентов на C++. Это упрощает работу с ними, но может влиять на производительность, если они будут храниться в памяти без явной структуры. Объект C# может находиться на любом участке памяти. Объект C++ также может находиться в любом участке памяти. Группировка и последовательное размещение объектов в памяти отсутствуют. При каждой загрузке в центральный процессор для обработки объект приходится собирать по частям из разных участков памяти. Это может сильно замедлить загрузку, а оптимизация потребует много усилий.

Для решения этих проблем мы начали перерабатывать базовые системы Unity на основе высокопроизводительного, многопоточного стека информационно-ориентированных технологий или DOTS (в настоящее время в статусе предварительной версии).

DOTS позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:

ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом вы можете прочитать в статье блога "On DOTS: Система компонент сущности".

Демофильм Unity Megacity создан на основе DOTS
Используйте все возможности современного оборудования

Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.

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

Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.

Unity Profiler для оптимизации производительности
Отладка в Unity

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

Вот несколько полезных ресурсов по оптимизации в Unity:

Профайлер

Profiler Analyzer

Memory Profiler

Основы оптимизации в Unity

Оптимизация производительности графики

Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)

Системы программирования в Unity

.NET: .NET — ранее в Unity использовалась реализация стандартной среды выполнения Mono с нативной поддержкой C#. Теперь Unity для MacOS поставляется с Visual Studio for Mac вместо MonoDevelop-Unity. Unity для Windows поставляется с Visual Studio.

Среда программирования .NET 4.6 в Unity поддерживает большинство существующих функций C# и позволяет осуществлять отладку для языка C# версии 6.0 и выше. Такое решение также обеспечивает удобство работы в IDE со скриптами на C# с поддержкой новых возможностей C#.

IL2CPP: IL2CPP: система программирования от Unity, которую можно использовать в качестве альтернативы Mono при работе над проектами для некоторых платформ. Если вы создаете проект с использованием IL2CPP, Unity преобразует код IL из скриптов и выполняет сборку в код C++, а затем создает нативный двоичный файл (например, .exe, apk, .xap) для выбранной платформы.

Имейте в виду, что IL2CPP — это единственный вариант системы программирования проектов, предназначенных для iOS и WebGL.

Настраивайте Unity, расширяя редактор

Дополнительные ресурсы

Перенос игры на стек DOTS
Перенос игры на стек DOTS
Демофильм Unity Megacity, созданный на основе DOTS
Документация по DOTS
Инструменты и сервисы в составе платформы разработки Unity
Обзор Unity, 3D-платформы реального времени