Программирование в Unity для опытных программистов
В Unity скрипты можно использовать для разработки практически любого элемента игры или интерактивного контента с графикой реального времени. Unity поддерживает скрипты на C#, созданные в соответствии с одним из двух основных подходов: традиционным и широко использующимся объектно-ориентированным подходом и информационно-ориентированным подходом, который теперь тоже поддерживается в Unity в отдельных случаях благодаря нашему высокопроизводительному многопоточному стеку информационно-ориентированных технологий (DOTS).
На этой странице
- Если у вас есть опыт программирования на C++
- Объекты GameObject и компоненты
- Программирование компонентов в Unity
- Преимущества информационно-ориентированного подхода
- Современное оборудование
- Отладка в Unity
- Системы программирования в Unity
- Настройка редактора Unity
Знакомитесь с Unity, имея знания C++?
Unity поддерживает C#, стандартный в отрасли язык программирования, в некоторой степени похожий на Java или C++.
По сравнению с C++, C# легче в изучении. Кроме того, он относится к категории языков «с управлением памятью», то есть он автоматически распределяет память, устраняет утечки и так далее.
Как правило C# удобнее C++, если вам нужно в первую очередь разработать игру, а потом уже работать над различными сложными аспектами программирования.
Объекты GameObject и компоненты в Unity
Вся интерактивность и игровой процесс в Unity строятся на основе трех фундаментальных блоков: объекты GameObject, компоненты и переменные.
Любой объект в игре является GameObject, будь то персонажи, источники света, спецэффекты, декорации и все остальное.
Компоненты
Игровые объекты сами по себе не имеют никакого поведения. Для того, чтобы объект начал работать, игровому объекту нужны различные атрибуты, добавляемые с помощью компонентов.
Компоненты (Component) определяют поведение игровых объектов, к которым они прикреплены, и управляют ими. Простой пример — создание источника света, включающее прикрепление компонента Light к GameObject (см. ниже). Таким же примером может быть добавление компонента Rigidbody к объекту, чтобы он мог падать.
Компоненты имеют ряд свойств или переменных, которые можно настроить в окне Inspector редактора Unity и/или с помощью скрипта. В примере выше к свойствам источника света относятся дальность, цвет и интенсивность.
Программирование компонентов в Unity
В Unity есть множество самых разнообразных компонентов, но вы вскоре можете столкнуться с необходимостью создать собственный компонент для реализации своих алгоритмов. Это можно сделать с помощью скриптов, в которых описана ваша собственная игровая логика и поведение объектов, и которые затем прикрепляются к игровым объектам как компоненты. Каждый скрипт связывается с внутренними механизмами Unity путем реализации класса, производного от встроенного класса MonoBehaviour.
Компоненты на основе скриптов позволяют запускать игровые события, проверять объект на предмет столкновений, применять физические свойства, программировать реакцию на управление пользователя и многое другое. См. 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)
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 позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.
7 языков, на которых можно писать в Unity
Те кто знаком с Unity знают, что написание скриптов происходит при помощи языков C# и JavaScript. На самом деле языков куда больше и в статье мы расскажем вам об этом.
Движок поддерживает несколько популярных языков программирования, так что вам не придется учить новый язык с нуля. Нужно только выбрать один из языков, которыми уже владеете, «прокачать» его и можно начинать экспериментировать. Причем дело не сводится только к C#, нормально работать с Unity можно и с использованием JavaScript, Python и ряда других языков, на этом сегодня остановимся подробнее.
C#
Если владеете этим языком программирования, то сможете использовать потенциал Unity на 100%. По сути, все библиотеки Unity написаны именно на C Sharp. В Unity используется Mono – open-source проект, являющийся одной из вариаций Microsoft. NET.
C Sharp – довольно простой в освоении язык, к тому же вам не нужно знать его досконально. Для работы с Unity достаточно базовых навыков. Его синтаксис схож с C++, Java, так что если владеете одним из этих языков, то освоить C Sharp будет еще проще.
В Unity в роли основного может быть несколько языков. Многое зависит от команды разработчиков, их целей.
Boo
Язык выпущен в 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 – довольно специфический язык с однообразным синтаксисом, широко используется разработчиками игр. Именно на Lua создана большая часть модов для World of Warcraft. В других проектах этот язык часто используется для написания AI.
Что касается Unity, то в платформе используется специальный интерпретатор MoonSharp, чтобы можно было подключить сторонний код, написанный на Lua. MoonSharp не стоит рассматривать как замену C#.
IronPython и IronRuby
Оба языка – результат реализации Python и Ruby соответственно на платформе .NET. Чтобы использовать их в Unity придется немного повозиться с подключением нужных библиотек , их можно найти на GitHub. Все материалы в свободном доступе.
После подключения обоих языков можно будет вызывать скрипты, написанные на них, прямо из C# кода. Бонусом получим возможность вызова .NET библиотек из Python.
Rust
Если сравнивать скорость и технические возможности, то Rust сопоставим с С++, язык не имеет проблем с безопасностью, скоростью и параллелизмом. В прошлом его называли неплохим вариантом для разработки ядер ОС.
В среднем 1.0-1.5% программистов регулярно используют Rust, пик популярности еще впереди, поэтому не стоит обращать внимания на столь незначительный процент. Функции и методы можно вызвать из Unity кода, но напрямую писать их не выйдет. Тем не менее, и такой уровень поддержки Rust отметить стоит.
C/C++
Использование этих языков стало привычной практикой для проектов, в которых важна скорость и надежность работы. Это универсальный язык, используется не только в разработке игр, но и в разработке операционных систем, прикладного ПО – вариантов применения масса. В Unity поддержка этих языков реализована «из коробки», то есть можно сразу переходить к созданию плагинов.
Новичкам в геймзидайне рекомендуем эти языки осваивать на старте обучения. Они просты, а знания, которыми овладеете на старте, пригодятся в будущем.
Заключение
Если собрались работать в Unity, то придется освоить C#, игнорировать этот язык не получится. Зацикливаться только на нем не обязательно, платформа поддерживает разношерстные языки программирования, так что каждый найдет вариант себе по душе. Исключением является разве что JavaScript. От него команда Unity решила отказаться и в будущем US вряд ли вернется, так что его для работы с Unity изучать не стоит. В остальном ограничений нет, работать можно с любым из перечисленных языков.
Больше интересных новостей
С чего начать изучение программирования новичку?
Удаленные профессии в сфере IT: ТОП-7 лучших
Книги для начинающих разработчиков Python: ТОП-8
5 свежих языков программирования
Комментарии (1)
Кирилла 10 декабря 2022 в 01:47
Так, а где питон в unity то, такое чувство что в статью вкинули просто так, поправьте если ошибаюсь
Игорь 19 января 2023 в 10:21
Какой язык учить для Unity? И какую книгу выбрать для изучения на английском?
Какой лучший язык для Unity? В американский видео говорят, мол, Unity написан на C# поэтому он и лучше подходит. JavaScript говорят тоже нормальный, но все же не C#, тоже самое про C++. В России часто склоняются к C++. Помогите определиться.
И если возможно, можете, пожалуйста, скинуть название книги для изученя языка на английском языке.
- Вопрос задан более трёх лет назад
- 6124 просмотра
Комментировать
Решения вопроса 1
Никита Тихомиров @Dexter_Legseto
Junior AR C# dev & 3D hobbyist
C Sharp Step by step by John Sharp
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
JackShcherbakov @JackShcherbakov Автор вопроса
Ответы на вопрос 2
GavriKos @GavriKos Куратор тега Unity
В юнити кодят ТОЛЬКО НА C#! Где вы взяли плюсы? JS там уже тоже считайте нет.
Вопрос поднимался сто раз.
Про литературу — гуглите прям по тостеру «книга для новичка C#».
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Сегодня разработка игр очень перспективная область. Поэтому если вы решили изучить Юнити — это очень классно. Литературы по изучению очень много, в частности:
Unity for Absolute Beginners. Sue Blackman
Unity Game Development in 24 Hours. Mike Geig
Learning Unity Android Game Development. Thomas Finnegan
Learning Unity iOS Game Development. Kyle Langley
еще если вы больше любите интерактивное изучение, можно взять приложения для мобильных, например нашла
https://play.google.com/store/apps/details?id=com.
достаточно хорошие уроки для изучения с нуля. там и тесты после каждого урока и общий тест и задачи какие-то .. мне понравилось
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ
- Unity
Как сделать так, чтоб звук издавался через другой audio source?
- 1 подписчик
- 14 часов назад
- 13 просмотров