В Unity скрипты можно использовать для разработки практически любого элемента игры или интерактивного контента с графикой реального времени. Unity поддерживает скрипты на C#, созданные в соответствии с одним из двух основных подходов: традиционным и широко использующимся объектно-ориентированным подходом и информационно-ориентированным подходом, который теперь тоже поддерживается в Unity в отдельных случаях благодаря нашему высокопроизводительному многопоточному стеку информационно-ориентированных технологий (DOTS).
На этой странице
- Если у вас есть опыт программирования на C++
- Объекты GameObject и компоненты
- Программирование компонентов в Unity
- Преимущества информационно-ориентированного подхода
- Современное оборудование
- Отладка в Unity
- Системы программирования в Unity
- Настройка редактора Unity
Знакомитесь с Unity, имея знания C++?
Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.
Как выучить Unity? Самый аху#### способ!
По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.
Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.
Объекты GameObject и компоненты в Unity
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
Программирование компонентов в Unity
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Учим Unity за 1 час! #От Профессионала
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. Unity Scripting API для дополнительной информации.
Преимущества информационно-ориентированного подхода с DOTS
Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент Rigidbody к объекту GameObject — он начнет падать, добавите компонент Light — GameObject начнет излучать свет. Все остальное также подчиняется этой простой логике.
При этом система компонентов создана на основе объектно-ориентированной платформы, что создает сложности для разработчиков при работе с кэшем и памятью развивающегося оборудования.
Компоненты и игровые объекты относятся к «тяжелым объектам C++». Все объекты GameObject имеют имя. Их компоненты представляют собой оболочки для C# поверх компонентов на C++. Это упрощает работу с ними, но может влиять на производительность, если они будут храниться в памяти без явной структуры. Объект C# может находиться на любом участке памяти.
Объект C++ также может находиться в любом участке памяти. Группировка и последовательное размещение объектов в памяти отсутствуют. При каждой загрузке в центральный процессор для обработки объект приходится собирать по частям из разных участков памяти. Это может сильно замедлить загрузку, а оптимизация потребует много усилий.
Для решения этих проблем мы начали перерабатывать базовые системы Unity на основе высокопроизводительного, многопоточного стека информационно-ориентированных технологий или DOTS (в настоящее время в статусе предварительной версии).
DOTS позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:
- система задач C# для эффективного исполнения кода на многопоточных системах;
- Entity Component System (ECS) для разработки высокопроизводительного кода по умолчанию;
- компилятор Burst для компиляции скриптов в оптимизированный нативный код.
ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом можно узнать из статьи «О DOTS: Entity Component System».
Используйте все возможности современного оборудования
Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.
Многопоточные системы DOTS помогают создавать игры для самых разных устройств и разрабатывать богатые игровые миры с большим числом элементов и сложными симуляциями. Производительный код, в свою очередь, снижает тепловыделение и продлевает время автономной работы мобильных устройств. Переход от объектно-ориентированного к информационно-ориентированному подходу упрощает вам многократное использование кода, а другим позволяет легче понять и дополнить его при необходимости.
Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.
Отладка в Unity
Настройка и отладка в Unity эффективна, потому что все переменные игрового процесса отображаются непосредственно в процессе игры, что позволяет менять их на лету без дополнительного программирования. Игру можно приостановить в любой момент или переходить от одного оператора к другому по очереди.
Вот несколько полезных ресурсов по оптимизации в Unity:
Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)
Источник: unity.com
Набор средств Visual Studio для Unity
Инструменты Visual Studio для Unity содержат обширный набор функций, повышающих эффективность написания и отладки скриптов C# для Unity и работы с проектами Unity.
- Устраняйте неполадки, проверяйте и анализируйте код с помощью отладчика, настроенного для проектов Unity.
- Быстро выявляйте и пишите скрипты Unity с использованием механизма завершения кода IntelliSense, характерного для Unity.
- Узнайте больше о создаваемом коде путем быстрого доступа к документации по Unity.
- Создавайте качественный код с параметрами рефакторинга, соответствующими рекомендациям для скриптов Unity.
- Определяйте способ, которым подсистема Unity вызывает код, с помощью указаний CodeLens для функций сообщений и использования ресурсов.
- И выполняйте многое другое.
Доступно для Windows и macOS
Инструменты Visual Studio для Unity являются бесплатными и поддерживают Visual Studio 2017 Community, Professional, Enterprise и более поздние версии. Рекомендуется скачать и использовать последнюю версию Visual Studio.
Инструменты Visual Studio для Unity являются бесплатными и включены в каждую установку Visual Studio для Mac 2017 и более поздних версий. Рекомендуется скачать и использовать последнюю версию Visual Studio для Mac.
Дополнительные сведения об установке и настройке см. в Инструменты Visual Studio для Unity начале работы с инструментами для Unity.
Поддерживаемые версии Unity
Пакет Unity редактора Visual Studio
Для Unity 2020.1 и более поздних версий требуется пакет Unity для внешних инструментов редактора, таких как Visual Studio и Visual Studio для Mac. Документация для получения дополнительных сведений об этих изменениях в записи блога по Unity.
В разделе о начале работы содержатся дополнительные сведения о конфигурации пакета редактора Visual Studio.
Рекомендуется использовать последнюю версию пакета редактора Visual Studio.
2022 | Unity 2019.4 | Редактор Visual Studio 2.0.11 |
2019 | Unity 2017.4 | Редактор Visual Studio 2.0.0 |
2017 | Не рекомендуется | Недоступно |
2022 | Unity 2019.4 | Редактор Visual Studio 2.0.11 |
2019 | Unity 2017.4 | Редактор Visual Studio 2.0.0 |
2017 | Не рекомендуется | Н/Д |
Компоненты
Функции событий Unity
Быстро и точно добавляйте функции событий Unity, такие как Start , Update и OnCollisionEnter в скрипты C# несколькими нажатиями клавиш, используя автоматические предложения, основанные на IntelliSense.
Создавайте код для нескольких функций событий Unity и их комментариев с помощью ⌘+Shift+M.
Быстро исправьте ошибки параметров в функциях событий, которые были добавлены вручную, с помощью предложений по быстрому исправлению.
Высокопроизводительный отладчик
Инструменты Visual Studio для Unity поддерживают надежные функции отладки, характерные для Visual Studio:
- Задавайте точки останова, включая условные.
- Оценивайте сложные выражения в окне «Контрольные значения».
- Проверяйте и изменяйте значения переменных и аргументов.
- Детализируйте сложные объекты и структуры данных.
Быстрые исправления и предложения по рефакторингу
Напишите эффективный код, сочетающий в себе лучшие методики и глубокое понимание проектов Unity Visual Studio.
Указания CodeLens
Определяйте места, откуда вызывается код, используя указания CodeLens, которые показывают неявные вызовы из ресурсов Unity. Выберите указание, чтобы просмотреть список неявных вызовов. При выборе конкретного вызова выполняется переход непосредственно к объекту в редакторе Unity.
Быстро отличайте код от методов Unity с помощью указаний для каждой функции события Unity.
Обозреватель проектов Unity
Отображайте файлы проекта в соответствии с представлением в окне иерархии в редакторе Unity.
Представление проекта Unity
Visual Studio для Mac автоматически отображает файлы проекта в соответствии с представлением в окне иерархии в редакторе Unity.
Документация по Unity
Просматривайте документацию по Unity непосредственно во всплывающих подсказках при проверке кода.
Чтобы быстро найти документацию по Unity, выделите имя класса или метода, а затем выберите пункт меню Справка > по API Unity.
Поддержка шейдеров
Выделение синтаксиса и автоматическое завершение для файлов шейдера.
Поддержка файлов определения сборки
Редактируйте файлы определения сборки Unity (.asmdef) непосредственно в Visual Studio с помощью раскраски и завершения ключевых слов.
Выполнение и отладка модульных тестов
Создавайте, выполняйте и отлаживайте модульные тесты непосредственно в Visual Studio для Mac.
Автоматическое обновление ресурсов Unity
Тратить меньше времени на переключение между Unity и Visual Studio. Изменения кода автоматически обновляются в Unity при сохранении файлов.
Источник: learn.microsoft.com
C# и еще 7 языков для Unity
Благодаря Unity сегодня разработкой игр может заниматься любой желающий, достаточно за несколько месяцев пройти экспресс-обучение работе с платформой и подтянуть один из языков программирования. Многие новички ошибочно полагают, что для работы с Unity необходимым и достаточным является C#, однако возможности платформы куда шире.
C#
Такое мнение относительно C# в Unity — не пустой слух. Помимо того, что это относительно простой и производительный язык программирования, есть и исключительно аппаратная причина. Unity использует open-source проект Mono, который является одной из многочисленных реализаций платформы Microsoft. NET. По факту, все библиотеки Unity написаны на C#.
Так что использовать все возможности платформы, не зная C#, у вас не получится. Но это не означает, что нельзя ограничиться базовым уровнем языка. Напротив, движок Unity тем и хорош, что здесь основными могут быть несколько языков — в зависимости от задач и разработчика. Но C# необходим. К счастью, его довольно легко изучить, а применять можно далеко за пределами Unity.
JavaScript
UnityScript был вторым базовым языком платформы. Вы можете убедиться в этом, открыв описания скриптов, где коды даны как на C#, так и на UnityScript. Если вам знаком и симпатичен синтаксис JavaScript — вам понравится работать с Unity.
Но будет ошибкой полагать, что UnityScript — это тот же JavaScript, но с другим названием. К примеру, US поддерживает классы, но при этом в нем нельзя переназначать переменные и использовать необязательные точки с запятой.
Плохая новость в том, что с лета 2017 года разработчики усиленно искореняют UnityScript из платформы. Это не ограничивается прекращением поддержки в оболочке — создатели пакетов со скриптами получают предупреждения о необходимости перевести весь код в C#.
К счастью, есть компилятор на GitHub, который все еще позволяет работать с JavaScript в Unity, и эту лазейку никто не собирается закрывать. Но удовольствие определенно потеряно.
Boo
Продолжая тему языков, от которых отказались разработчики Unity, вспомним Boo. По структуре он похож на Python, прост в освоении, у него краткий и удобный синтаксис, который поддерживается .NET и Mono. В Unity он появился благодаря одному из создателей платформы — Родриго Де Оливейре, который также разработал Boo.
От языка отказались по банальной причине — из-за низкой популярности. Boo не привносил новых возможностей в Unity, не привлекал армию разработчиков, так что его поддержка была жестом доброй воли. Поэтому, когда пути Оливейры и Unity разошлись, Boo оставили за бортом.
IronPython и IronRuby
Для любителей Python все же есть возможность поработать с Unity. Решение — IronPython, набор библиотек, расположенных в GitHub. Позволяет запускать «змеиные» скрипты прямо из C#-кода. Полезное расширение — возможность вызывать .NET-библиотеки из Python.
Аналогичной функциональностью обладают библиотеки под общим названием IronRuby. Синтаксис похожий, поэтому придется потратить время лишь на подключение исходников, зато в ответ Unity станет поддерживать еще один язык.
Lua
Lua не входит в топ самых популярных языков программирования. Но он обитает преимущественно в играх, так что в Unity должен быть представлен. За это отвечает MoonSharp — интерпретатор для Mono, платформы .NET и Unity. MoonSharp не заменяет C#, а дает разработчику возможность подключить сторонний код на Lua. Такой принцип реализован, к примеру, в WoW, где огромное количество модов написано именно на Lua.
C/C++
Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.
Кстати, если вы решили заниматься в будущем именно гейм-дизайном, то начать погружение в профессию стоит именно с этих языков. В них собраны почти все фундаментальные понятия в программировании, а учиться дальше после C# — проще простого.
Rust
Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.
Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.
Источник: gb.ru