unity на чем программировать
Научитесь программированию в Unity
Хотите программировать собственные компьютерные игры? Начните с бесплатных наборов и обучающих материалов по программированию на Unity Learn, а также не забывайте про наше замечательное сообщество.
Unity FPS Microgame
Новички могут загрузить Unity бесплатно и начать с готовых ресурсов Unity Microgame и Mod. Затем углубите знания с помощью обучающих материалов и изучите структуру C#, языка программирования игр в Unity. Научитесь разрабатывать простые скрипты на C# для программирования игрового процесса, механики, визуальных эффектов, систем ИИ и других элементов.
Реализуйте свои способности к программированию в Unity! Это может стать началом вашей успешной карьеры. Unity — самая популярная платформа разработки игр в мире: 50% всех мобильных игр созданы в Unity! Профессия Unity-разработчика находится в первой десятке по росту востребованности в США согласно данным LinkedIn.
Introduction to C# scripting in Unity
Скрипты в Unity разрабатываются на языке C# (произносится как «си-шарп»), который имеет богатые возможности и прост в изучении. Предлагаем вашему вниманию простое и понятное введение в программировании на C# в Unity, которое также включает информацию о базовом синтаксисе языка, то есть о переменных, функциях и классах.
Unity Creator Kit: Code
Наборы Creator Kit — это простые игровые проекты, доступные на Unity Learn. Каждый из них можно изучить и освоить за несколько часов В наборе Creator Kit для начинающих программистов вы познакомитесь с основами разработки скриптов на C# для Unity в контексте игры жанра экшен-RPG.
Create with Code course from Unity
Create with Code — это официальный вводный курс Unity по программированию, содержащий более 37 часов насыщенного образовательного контента. В процессе разработки прототипа, решения задач по программированию и ответов на вопросы вы освоите базовые принципы программирования на примере разработки собственного игрового проекта на C# с нуля.
Другие способы учиться программированию в Unity
Обучающие материалы по программированию на C# в Unity
У нас есть масштабная коллекция коротких уроков, где рассматриваются основы программирования на C# в Unity. Начните с материалов для начинающих, а затем переходите к коллекции для опытных пользователей.
Learn C# from Brackeys
Советуем вам изучить эту серию видеороликов с популярного канала Brakeys на YouTube, где рассматриваются основы разработки скриптов на C# в Unity.
Автор: Jabrils
Разработчик ПО и опытный блогер Jabrils рассказывает на YouTube о том, как он учился программировать, и публикует собственные материалы для начинающих в плейлисте Everything you need to start programming.
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
Если сравнивать скорость и технические возможности, то Rust сопоставим с С++, язык не имеет проблем с безопасностью, скоростью и параллелизмом. В прошлом его называли неплохим вариантом для разработки ядер ОС.
В среднем 1.0-1.5% программистов регулярно используют Rust, пик популярности еще впереди, поэтому не стоит обращать внимания на столь незначительный процент. Функции и методы можно вызвать из Unity кода, но напрямую писать их не выйдет. Тем не менее, и такой уровень поддержки Rust отметить стоит.
Использование этих языков стало привычной практикой для проектов, в которых важна скорость и надежность работы. Это универсальный язык, используется не только в разработке игр, но и в разработке операционных систем, прикладного ПО – вариантов применения масса. В Unity поддержка этих языков реализована «из коробки», то есть можно сразу переходить к созданию плагинов.
Новичкам в геймзидайне рекомендуем эти языки осваивать на старте обучения. Они просты, а знания, которыми овладеете на старте, пригодятся в будущем.
Заключение
Если собрались работать в Unity, то придется освоить C#, игнорировать этот язык не получится. Зацикливаться только на нем не обязательно, платформа поддерживает разношерстные языки программирования, так что каждый найдет вариант себе по душе. Исключением является разве что JavaScript. От него команда Unity решила отказаться и в будущем US вряд ли вернется, так что его для работы с Unity изучать не стоит. В остальном ограничений нет, работать можно с любым из перечисленных языков.
Программирование в 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 позволяет вашей игре эффективно использовать все возможности новейших многоядерных процессоров. Стек состоит из следующих компонентов:
ECS — это новая система компонентов в составе DOTS; все традиционные объектно-ориентированные манипуляции над GameObject отражаются на экземпляре в новой системе. Название «Компонент» никак не изменилось. Важнейшее отличие — в структуре данных. Подробнее об этом можно узнать из статьи «О DOTS: Entity Component System».
Помимо того, что это улучшенный подход к написанию кода игры с точки зрения дизайна, ECS позволяет вам использовать систему задач C# Unity и компилятор Burst и тем самым полностью использовать преимущества современного оборудования.
Многопоточные системы DOTS помогают создавать игры для самых разных устройств и разрабатывать богатые игровые миры с большим числом элементов и сложными симуляциями. Производительный код, в свою очередь, снижает тепловыделение и продлевает время автономной работы мобильных устройств. Переход от объектно-ориентированного к информационно-ориентированному подходу упрощает вам многократное использование кода, а другим позволяет легче понять и дополнить его при необходимости.
Некоторые из технологий DOTS все еще находятся в статусе предварительной версии, поэтому мы советуем разработчикам использовать стек для решения отдельных вопросов производительности проекта, не строить на базе DOTS весь проект. См. раздел «Дополнительные ресурсы» в конце этой страницы, где указаны ссылки на ключевые ресурсы DOTS.
Настройка и отладка в Unity эффективна, потому что все переменные игрового процесса отображаются непосредственно в процессе игры, что позволяет менять их на лету без дополнительного программирования. Игру можно приостановить в любой момент или переходить от одного оператора к другому по очереди.
Вот несколько полезных ресурсов по оптимизации в Unity:
Наилучшие методики для общих случаев (включая подробные советы по оптимизации системы интерфейса Unity)
Как С# разработчику перейти на Unity
Как я начал программировать
Я учился в ХАИ по специальности «Телекоммуникации». У нас был преподаватель, который конструировал беспилотники. Благодаря ему уже на 4-м курсе я начал писать простой код на С для микроконтроллеров, которые управляют передачей данных с земли на БПЛА. Тогда я решил, что нужно выучить какой-то актуальный язык программирования, чтобы писать на нём постоянно, а не только для решения узких задач.
Выбирал я между С# и Java: читал книги по этим языкам, но потом просто открыл Visual Studio и Java IDE и сделал выбор в пользу первого по «обертке». Не самый правильный способ анализа преимуществ и недостатков, но о выборе я не жалею.
Почему пошел в геймдев и выбрал Unity
В 5–7 классах мы с другом пытались сделать игру. И хотя получилась ерунда, романтика процесса осталась со мной. К тому же я люблю играть, особенно в древние RPG. После университета я работал в нескольких продуктовых компаниях: год занимался веб-программированием, потом 4 года разрабатывал ПО для call-центров. Но меня всё время преследовала идея попробовать себя в разработке игр. Так что в свободное от работы время я стал думать, какой движок использовать для будущей игры.
Многие разработчики используют Unity и Unreal Engine, но я хотел изучить все варианты. Поэтому я стал разбираться, на чем написаны популярные проекты. Оказалось, что это либо самописные движки, как, например, у Naughty Dog, либо движки, о которых очень мало информации в интернете — чтобы работать с ними, нужно, скорее всего, некоторое время работать в индустрии и знать хотя бы общие принципы построения игровых движков.
У Unity есть аналог StackOverflow — Unity Answers. Там очень просто найти ответы на конкретные вопросы на начальном этапе, поэтому порог входа очень низкий, особенно если человек понимает хотя бы общие принципы программирования.
С чего начать обучение
Я изучал уже решенные задачи, похожие на те, что интересовали меня. Однажды я искал конкретное решение, но не нашел его в Asset Store. Поэтому начал мониторить форумы и наткнулся на парня, который делал именно то, что мне было нужно, но в Store его решение не пропустили по каким-то требованиям. Я написал ему сообщение и предложил купить его наработку. Он очень обрадовался возможности подзаработать — это был румынский десятиклассник. Чуть ли не лучшее мое вложение в изучение движка: 10$ плюс столько же за Swift-платеж.
Новичку полезно посмотреть, как работают над задачами другие люди, даже если это что-то примитивное. Ведь решений может быть множество. Когда начинаешь, как будто шаришь пальцами в темноте. Ты не знаешь, насколько удачно выбранное решение: возможно, с его реализацией возникнут проблемы в будущем или есть более простой вариант.
Всегда лучше ориентироваться на какой-то пример. Я распотрошил покупку: там было много наворочено, но я переделал это решение под свои нужды. Пока разбирал этот пример, многие вопросы начального уровня отпали. Так начал понимать основные принципы работы с Unity и продолжил разбираться с возможностями движка.
За месяц-полтора изучил базу, но не поверхностно, а достаточно предметно — то, что было нужно на тот момент. Сначала возникло очень много вопросов, как и с любой новой технологией. Я смотрел нативный код и читал мануалы, чтобы разобраться, почему что-то работает в Unity именно так, а не иначе. Но, конечно, будет тяжелее и дольше, если нет конкретных задач и ты не понимаешь, зачем это делаешь.
Нет смысла изучать Unity просто так — стоит начинать с решения конкретных проектных задач. Лучше сразу определиться: «Я хочу сделать Pac-Man». Начинаешь думать, что для этого понадобится: например, нужно реализовать управление персонажем. Желтое существо ест белые точки. Существо должно понимать, что наткнулось на съедобный объект — значит, нужно начать с определения соприкосновения съедобной точки с Пакменом. Тогда появляется конкретная проблема и необходимость искать пути ее решения — а это, по-моему, и есть лучший способ изучения технологии.
Что почитать
Кроме Unity Answers есть еще UnifyWiki. Можно декомпилировать код и посмотреть результат (он не обфусцирован).
На старте очень пригодились форумы (answers.unity3d.com и forum.unity3d.com). Также я читал книгу Game Engine Architecture Джейсона Грегори. Автор в ней не говорит конкретно о Unity, но подробно рассматривает составные части и особенности игровых движков в целом. Он в деталях описывает, из чего состоит движок, какая математика нужна, как устроен рендеринг. Эта книга расширяет представление о Unity: я начал понимать, что в этом движке есть или должно быть, что с него спрашивать. Единственная трудность — для прочтения этой книги нужно быть очень мотивированным: она не нудная, но достаточно объемная.
Преимущества работы с Unity
Большие компании любят Unity за кроссплатформенность. Если ты что-то написал, оно билдится и под iOS, и под Android — пусть и с надстройками, но зато сразу работает без особых плясок. Конечно, если это не касается платежки 🙂
Надеюсь, информация будет полезна тем, кто планирует работать с Unity. Успехов!
C# и еще 7 языков для Unity
Благодаря Unity сегодня разработкой игр может заниматься любой желающий, достаточно за несколько месяцев пройти экспресс-обучение работе с платформой и подтянуть один из языков программирования. Многие новички ошибочно полагают, что для работы с Unity необходимым и достаточным является 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, не привлекал армию разработчиков, так что его поддержка была жестом доброй воли. Поэтому, когда пути Оливейры и Unity разошлись, Boo оставили за бортом.
IronPython и IronRuby
Аналогичной функциональностью обладают библиотеки под общим названием IronRuby. Синтаксис похожий, поэтому придется потратить время лишь на подключение исходников, зато в ответ Unity станет поддерживать еще один язык.
Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.
Кстати, если вы решили заниматься в будущем именно гейм-дизайном, то начать погружение в профессию стоит именно с этих языков. В них собраны почти все фундаментальные понятия в программировании, а учиться дальше после C# — проще простого.
Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.
Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.
Благодаря Unity сегодня разработкой игр может заниматься любой желающий, достаточно за несколько месяцев пройти экспресс-обучение работе с платформой и подтянуть один из языков программирования. Многие новички ошибочно полагают, что для работы с Unity необходимым и достаточным является 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, не привлекал армию разработчиков, так что его поддержка была жестом доброй воли. Поэтому, когда пути Оливейры и Unity разошлись, Boo оставили за бортом.
IronPython и IronRuby
Аналогичной функциональностью обладают библиотеки под общим названием IronRuby. Синтаксис похожий, поэтому придется потратить время лишь на подключение исходников, зато в ответ Unity станет поддерживать еще один язык.
Как и в подавляющем большинстве продуктов, где требуется быстродействие, определенный фронт работ поручают C или C++. Unity не требует установки дополнительных надстроек или подключения библиотек, здесь «из коробки» можно создавать DLL-плагины.
Кстати, если вы решили заниматься в будущем именно гейм-дизайном, то начать погружение в профессию стоит именно с этих языков. В них собраны почти все фундаментальные понятия в программировании, а учиться дальше после C# — проще простого.
Чтобы повысить скорость обработки информации, в Unity можно использовать другой язык — Rust. Функции и методы напрямую писать не получится, но их можно вызвать из Unity-кода. Пик популярности Rust позади, но, по свежим рейтингам, до 1,5 % программистов периодически используют его в работе. И им эта функция Unity наверняка придется по душе.
Как видите, несмотря на необходимость знать C# хотя бы на базовом уровне, Unity позволяет использовать еще несколько разношерстных языков. Если захотите разнообразить свою работу в гейм-дизайне, вы теперь знаете, как это сделать.