7 языков, на которых можно писать в Unity
Те кто знаком с Unity знают, что написание скриптов происходит при помощи языков C# и JavaScript. На самом деле языков куда больше и в статье мы расскажем вам об этом.
Движок поддерживает несколько популярных языков программирования, так что вам не придется учить новый язык с нуля. Нужно только выбрать один из языков, которыми уже владеете, «прокачать» его и можно начинать экспериментировать. Причем дело не сводится только к C#, нормально работать с Unity можно и с использованием JavaScript, Python и ряда других языков, на этом сегодня остановимся подробнее.
Если владеете этим языком программирования, то сможете использовать потенциал Unity на 100%. По сути, все библиотеки Unity написаны именно на C Sharp. В Unity используется Mono – open-source проект, являющийся одной из вариаций Microsoft. NET.
C Sharp – довольно простой в освоении язык, к тому же вам не нужно знать его досконально. Для работы с Unity достаточно базовых навыков. Его синтаксис схож с C++, Java, так что если владеете одним из этих языков, то освоить C Sharp будет еще проще.
В Unity в роли основного может быть несколько языков. Многое зависит от команды разработчиков, их целей.
Язык выпущен в 2011 г., автор – Родриго де Оливейра, этот же человек в прошлом активно работал над Unity. Синтаксис Boo – нечто среднее между IronPython и CPython, через настройку компилятора его можно сделать динамически-типизированным хотя по умолчанию он таковым не является.
Язык прост и удобен, синтаксис не перегружен сложными предложениями. В Unity он поддерживался до тех пор, пока над платформой работал его автор. Как только Оливейра ушел из команды, поддержка Boo была прекращена.
Причина проста – язык непопулярен и нет смысла тратить ресурсы на его дальнейшую поддержку. Он не может привлечь новых разработчиков в Unity, не дает никаких преимуществ по сравнению с другими языками и просто не окупает усилий, затрачиваемых на его поддержку в платформе.
JavaScript
Наряду с C# был базовым языком Unity. В платформе использовался UnityScript, этот язык несколько отличается от классического JS. US правильнее было бы назвать специальной версией JavaScript синтаксис схож, но отличий хватает. Например, в US отсутствует возможность переназначения переменных, нельзя использовать необязательные точки с запятой.
До недавнего времени коды скриптов давались как на C#, так и на UnityScript. Но в последнее время от US команда Unity отказывается. Причем не просто прекратили его поддерживать, а активно переводят все скрипты на C# и в будущем UnitySript будет искоренен полностью. С середины 2017 г. авторам скриптов рассылается предупреждение о необходимости перевода кода в C#. Так что, если собрались изучать этот язык, лучше оставьте эту затею.
Обойти это ограничение можно через компилятор на GitHub, специально ограничивать использование JS в Unity никто не собирается. Но работать с таким «костылем» все же не так удобно.
Lua – довольно специфический язык с однообразным синтаксисом, широко используется разработчиками игр. Именно на Lua создана большая часть модов для World of Warcraft. В других проектах этот язык часто используется для написания AI.
Что касается Unity, то в платформе используется специальный интерпретатор MoonSharp, чтобы можно было подключить сторонний код, написанный на Lua. MoonSharp не стоит рассматривать как замену C#.
IronPython и IronRuby
Оба языка – результат реализации Python и Ruby соответственно на платформе .NET. Чтобы использовать их в Unity придется немного повозиться с подключением нужных библиотек , их можно найти на GitHub. Все материалы в свободном доступе.
После подключения обоих языков можно будет вызывать скрипты, написанные на них, прямо из C# кода. Бонусом получим возможность вызова .NET библиотек из Python.
Если сравнивать скорость и технические возможности, то Rust сопоставим с С++, язык не имеет проблем с безопасностью, скоростью и параллелизмом. В прошлом его называли неплохим вариантом для разработки ядер ОС.
В среднем 1.0-1.5% программистов регулярно используют Rust, пик популярности еще впереди, поэтому не стоит обращать внимания на столь незначительный процент. Функции и методы можно вызвать из Unity кода, но напрямую писать их не выйдет. Тем не менее, и такой уровень поддержки Rust отметить стоит.
Использование этих языков стало привычной практикой для проектов, в которых важна скорость и надежность работы. Это универсальный язык, используется не только в разработке игр, но и в разработке операционных систем, прикладного ПО – вариантов применения масса. В Unity поддержка этих языков реализована «из коробки», то есть можно сразу переходить к созданию плагинов.
Новичкам в геймзидайне рекомендуем эти языки осваивать на старте обучения. Они просты, а знания, которыми овладеете на старте, пригодятся в будущем.
Заключение
Если собрались работать в Unity, то придется освоить C#, игнорировать этот язык не получится. Зацикливаться только на нем не обязательно, платформа поддерживает разношерстные языки программирования, так что каждый найдет вариант себе по душе. Исключением является разве что JavaScript. От него команда Unity решила отказаться и в будущем US вряд ли вернется, так что его для работы с Unity изучать не стоит. В остальном ограничений нет, работать можно с любым из перечисленных языков.
Больше интересных новостей
Как монетизировать web-проект: 6 рабочих моделей
Подборка материалов для изучения Android
9 отличных сервисов для проверки кода
Эти проекты обречены на успех: самые свежие идеи для программистов
Юнити: какой язык использовать, как работать
В данной статье будет рассказано об азах работы с Unity. Вы узнаете о преимуществах этой технологии, а также о том, какие языки программирования используются для работы с движком. Расскажем и про искусственный интеллект, который довольно часто встречается в современных играх, особенно в online MMORPG.
Unity – это…
Unity – среда разработки, которая подходит для межплатформенного программирования. Дает возможность написания контента более чем под 25 разных платформ. Сюда включают:
- консоли;
- компьютеры;
- интернет-софт;
- мобильные платформы.
Unity вышел в 2005 году, став с самого начала популярным. Изначальный язык интерфейса – английский. Но с движком сможет справиться даже новичок.
Преимущества
Юнити – целый сборник инструментов и виджетов для быстрой разработки всевозможного контента. Обладает огромным количеством преимуществ:
- не надо думать, на каком языке использовать Unity – он предусматривает самые популярные ЯП;
- кроссплатформенность;
- наличие визуальной среды разработки;
- расширенный инструментарий;
- модульная система компонентов.
С многокомпонентными схемами здесь возможны некоторые трудности. А еще проблемы не исключены, если возникает необходимость в подключении внешних библиотек. Зато игры, написанные при помощи Unity, могут использовать искусственный интеллект. Им пользуются как мелкие компании, так и крупные разработчики.
Программирование и разработка – понятия
Перед тем, как интересоваться, есть ли документация к рассматриваемому движку на русском языке, стоит обратить внимание на разницу в создании контента. Существуют два схожих между собой понятия. К ним относят «разработку» и «программирование».
Второй термин подходит для «обычных программистов». Это – выполнение строго поставленной задачи на заданном языке программирования. Программеры специализируются на узком круге операций.
Разработка – более широкое понятие. При работе такой кадр может не только решать конкретные задачи. Он поддерживает контент «от начала до конца». Разработка предусматривает понимание архитектуры коддинга и создания утилит, поддержку коммуникаций в команде, а также создание технического задания для проекта.
Языки для Юнити
Языки в Unity используются совершенно разные. Документация на русском отлично это демонстрирует. Поэтому начало обучения азам работы с платформой сводится к выбору ЯП. Далее будут представлены самые распространенные варианты. Они подойдут для изучения как новичками, так и опытными программерами.
В Unity можно использовать язык под названием C#. Он достаточно простой. Выделяется своей производительностью. Также стоит обратить внимание на то, что Unity использует open source проект под названием Moni. Он – один из вариантов реализации Microsoft Net. У него все библиотеки написаны на C#.
Стоит обратить внимание на то, что для полноценного применения Unity, Си Шарп является обязательным. Это связано с тем, что многие функции и инструменты здесь прописаны именно на нем.
JavaScript
При создании персонажа можно использовать JS. Он предусматривает следующие особенности:
- прост в освоении;
- выступает в качестве второго «базового» языка, на котором пишут в Юнити;
- есть документация на русском и дружелюбное комьюнити;
- обладает высокой читаемостью кода.
Особо хороший вариант для тех, кто уже умеет работать со скриптами. За счет GitHub удается повысить функциональность ЯП.
Разработчик на Unity может создать персонажа, внедрить его в игру и прописать иные особенности через Boo. Чем-то напоминает Python. Обладает кратким и понятным синтаксисом, предусматривающим поддержку .NET и Mono.
На практике встречается редко. Связано это с тем, что Boo не добавлял новые возможности в движок. И для программеров он не выступает особо привлекательным. Поэтому такой вариант разработки – на любителя.
IronPython
IronPython – вариант для тех, кто уже изучил руководство по Питону, и теперь хочет применить его в режиме реального времени в Юнити. Это – набор библиотек, который расположен на GitHub. Он предусматривает возможность запускать скрипты прямо из Си-Шарп-кодификации. Также можно осуществлять вызов Net библиотек через Python.
То же самое касается IronRuby. Разработка на Unity через него отнимет минимум времени и сил. А все благодаря понятному на интуитивном уровне синтаксису. Специализированное руководство поможет быстрее освоиться.
Lua – это далеко не самый популярный вариант при использовании движка, особенно если нужно внедрить искусственный интеллект. Этот язык учим тогда, когда «хочется чего-то новенького». Он:
- предназначен преимущественно для игрового софта;
- использует MoonSharp – интерпретатор языка для Mono;
- не может заменить Си Шарп;
- дает возможность подключать сторонние коды.
Большинство модов для WoW написаны именно на Lua. С подобной задачей сможет справиться любой разработчик на Unity.
Если учим азы коддинга, стоит обратить внимание на СИ-семейство. А там – на языки C/C++. Подавляющее большинство контента написано на них. Относительно программирования на Unity можно сказать, что «из коробки» после установки движка удастся сразу мастерить DLL-плагины.
В гейм-дизайне СИ-семейство – непревзойденный лидер. Информации по нему очень много. Дает возможность создать персонажа, а также достаточно быстро научиться управлять им в будущем контенте.
Изучая руководство по коддингу в движке, можно увидеть, что он предлагает Rust в качестве ЯП. С его помощью происходит повышение скорости обработки данных. Это – далеко не самый популярный, но весьма интересный подход. Функции и методы здесь напрямую не пишутся. Зато они имеют поддержку вызова из Unity-кода.
Как начать работать
Программирование в Unity – это легко, особенно если есть соответствующая documentation на русском. Принцип работы здесь прост:
- Установить движок.
- Выучить выбранный заранее ЯП.
- Создать объекты.
- Разместить их на экране.
- Написать скрипты и триггеры.
- Привязать соответствующие компоненты к элементам на экране.
Так процедуру написания собственной игры в Юнити можно описать кратко. Для успешного коддинга требуется изучить азы выбранного ЯП, а лучше – рассмотреть его более профессионально.
Как быстро освоить платформу
Для того, чтобы быстрее разобраться с коддингом и выбрать язык для написания скриптов в рассмотренной платформе, можно закончить дистанционные компьютерные курсы. Они научат азам и секретам программирования. Обратить внимание нужно на направление «Разработчик на Unity». Подойдет курс как новичкам, так и опытным программерам.
В процессе обучения пользователь получит массу опыта, а также практики и новые знакомства. В конце выдается электронный сертификат установленного образца.
Интересует GameDev-направление? Обратите внимание на авторские курсы в Otus!
Программирование в Unity
Инструменты Unity помогают программистам любого уровня создавать увлекательные и высокопроизводительные интерактивные приложения для более чем 20 платформ.
10 % программистов по всему миру используют Unity
Более 50 % игр созданы на базе Unity
Профессия разработчика Unity занимает седьмое место по росту востребованности
В чем преимущества Unity?
Развертывайте высокопроизводительный код C# на более чем 20 платформах
В Unity используется среда .NET и язык программирования C# — самый популярный в разработке игр. Движок компилирует код C# для каждого целевого устройства, поэтому вы можете развертывать приложения для ПК, мобильных устройств, консолей, а также платформ AR и VR.
Ускоряйте работу, используя удобную для себя среду IDE
Воспользуйтесь инструментами для повышения производительности в современных интегрированных средах разработки, например Visual Studio или Rider. Пишите код и выполняйте его отладку, чтобы совершенствовать свой проект или редактор Unity, проводите аналитику качества и производительности и многое другое.
Достигайте большего, используя редактор Unity
Помогайте дизайнерам и художникам творить в Unity. Ускорьте выполнение рутинных операций (таких как изменение значений или интеграция ассетов) и расширьте редактор в соответствии со своими потребностями.
Улучшайте качество кода
Выявляйте проблемы и оптимизируйте код, используя профайлеры и инструменты Unity для тестирования. Backtrace для Unity позволяет автоматически отслеживать ошибки и сбои на каждой платформе. С легкостью выпускайте обновления с помощью облачной системы доставки контента.
Вам больше не нужно создавать 3D-платформы реального времени для своего приложения — Unity сделает это за вас. Пропишите скрипты интерактивного игрового процесса, а затем проведите тестирование прямо в редакторе. В Unity используется язык C#, который автоматически распределяет и освобождает память, собирает мусор для профилактики утечек и не только.
«Система Addressable Asset System от Unity очень нам помогла. Она оперативно устранила проблемы с памятью. Без этого мы не смогли бы так быстро создать игру для платформы Switch», — Макс Макгуайр, технический директор, Unknown Worlds. Платформа Unity предлагает множество инструментов, которые помогают управлять кодом и ассетами проектов для достижения максимальной производительности. Например, пакет Addressables снижает ресурсоемкость системы управления ассетами и упрощает создание и развертывание контента. Объекты ScriptableObjects идеально подходят для проектов, в которых нужно управлять большими объемами данных, меняющихся в ходе разработки.
«Plastic открыла ранее недоступный нам уровень детального контроля веток. Она легко поддается парсингу, удобна в работе с проектами и не нарушает их структуру», — Салим Даббуа, директор студии, KO_OP. Plastic SCM — это лучшая система контроля версий для разработчиков Unity, которая великолепно подходит для обработки крупных двоичных файлов и создания быстрых рабочих процессов. Кроме того, система имеет упрощенный интерфейс для участников команды, которые не занимаются программированием. Редактор также можно интегрировать с Perforce или использовать любое другое решение, например Git.
«Благодаря Unity наши художники больше не так сильно зависят от программистов. Когда мы использовали предыдущий движок, программистам приходилось проводить большую часть работ по интеграции визуальных элементов. Теперь же у художников появилось значительно больше возможностей. Я заметила, что просьб передвинуть два пикселя влево или сделать что-то в этом духе стало намного меньше», — Катрин Барбо, технический директор, Ludia.
Возможности Unity не ограничиваются управлением значениями и ассетами через код. Программист с легкостью может настроить интерфейс редактора так, чтобы художники и дизайнеры могли менять игровой процесс и создавать сцены с помощью движка. Теперь, если дизайнер хочет что-то изменить, он может просто убрать флажок, а не просить вас полностью переписать код.
«Для Arena of Valor нам требовалась поддержка многочисленных конфигураций оборудования в различных странах, и Unity помог достигнуть ожидаемой нами стабильной производительности», — Мэллоу Ю, технический директор, Tencent Games.
Unity поддерживает тесные партнерские отношения со всеми основными платформами. Вы можете добиться максимальной производительности от каждого из более чем 20 доступных вариантов развертывания, не волнуясь о совместимости с новыми устройствами. Система ввода Unity позволяет настраивать элементы управления в одном интерфейсе, для всех платформ и устройств без дополнительных инструментов.
Вы создаете отличные игры, а Unity делает их работу быстрой и стабильной. Редактор Unity содержит набор профайлеров и инструментов для оптимизации. Они помогут максимально эффективно использовать ресурсы на вашей целевой платформе.
Unity Profiler предоставляет данные о производительности приложения, а Memory Profiler позволяет снизить потребление памяти. Unity Test Framework позволяет создавать автоматические тесты, чтобы убедиться, что код работает должным образом. Backtrace избавляет от рутинной работы по обработке аварийных завершений и исключений кроссплатформенных приложений, позволяя сосредоточиться на выпуске игры.
Программирование в Unity для опытных программистов
В Unity скрипты можно использовать для разработки практически любого элемента игры или интерактивного контента с графикой реального времени. Unity поддерживает скрипты на C#, созданные в соответствии с одним из двух основных подходов: традиционным и широко использующимся объектно-ориентированным подходом и информационно-ориентированным подходом, который теперь тоже поддерживается в Unity в отдельных случаях благодаря нашему высокопроизводительному многопоточному стеку информационно-ориентированных технологий (DOTS).
Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.
По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.
Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. Unity Scripting API для дополнительной информации.
Традиционная модель «игровой объект — компонент» хорошо работает и сегодня, поскольку она проста как для программистов, так и других пользователей, а также удобна для создания интуитивных интерфейсов. Добавите компонент 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)