Программирование в 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)
Необходимые навыки и технологии в разработке игр на Unity
Сегодня игровая индустрия развилась настолько, что некоторый визуал игр кажется реалистичнее, тем сама жизнь. Специалисты, работающие на Unity занимают отдельную ветку в мире разработки игр.
Так, эти специалисты имеют не только особую популярность, но и высокий уровень заработка. Давайте поговорим о навыках и необходимых технологиях, которые позволят преуспеть в профессии Unity-разработчика.
Unity Game Developer – кто это?
Разработчик Unity – это специалист, реализующий полный жизненный цикл игр. Он отвечает за планирование, создание архитектуры и других компонентов, тестирование, исправление ошибок, адаптацию под разные системы и устройства, запуск, внедрение обновлений в готовый продукт и дополнительных модификаций. Когда игра уже в активной продаже, профессионалу все равно нужно ее дорабатывать. Он должен отслеживать негативные отзывы, внедрять корректировки, проводить повторное тестирование и постоянно совершенствовать игру.
Технологии и навыки
Кроме умения взаимодействовать с самой платформой Unity, специалисту необходимы следующие технологии:
№1. Язык программирования
Для работы с Unity требуется знать язык программирования С#. С помощью него и Mono фреймворка .NET можно реализовывать масштабные проекты, которые будут оптимизированы для работы с разными операционными системами.
Для реализации онлайн игр понадобится ASP MVC. Это фреймворк для работы с веб-приложениями. Он позволяет упрощать работу с базами данных и сетевое взаимодействие.
№2. Редактор Unity3D
Основной рабочий процесс разработчика Unity проходит в редакторе. Он должен быть полностью изучен. Лучше если у специалиста имеется за плечами большой опыт работы с навыками реализации разных проектов.
Также нужно разобраться с программными библиотеками Unity.
№3. Инструменты командной работы
Большинство игр создаются целой командой профессионалов. Чем объемнее игра, тем больше Unity специалистов вовлекается в работу. Для эффективной командной работы нужны знания систем контроля версий. Лучше всего узнать все о тех, которые поддерживаются системой Unity – Plastic SCM и Perforce. Но также будет полезно изучить Git. Хотя для работы с последней нужно произвести настройку Unity, она более удобна и проста в работе, ну и абсолютно бесплатна.
И напоследок…
Специалисту Unity необходимо не только уметь работать самостоятельно, но и взаимодействовать с коллегами. Опытные разработчики могут руководить целым отделом своих же коллег. Но стоит понимать, что в процессе работы по разработке крупного проекта, у каждого узкопрофильного специалиста будет свой объем задач. Здесь Unity-разработчику понадобится уметь правильно распределять задачи и следить за их выполнением. Чем крупнее проект, тем сложнее. То есть для прорисовки персонажа нужно привлечь одного 3D-художника, для текстурирования другого 3D-шника, а для анимации – отдельного анимационного дизайнера.
Больше интересных новостей
Лица, созданные ИИ, нельзя отличить от настоящих?
10 IT-профессий, которые могут не бояться ИИ и автоматизации
Что выбрать C++ или C#? С чего лучше начать?
Сколько времени нужно чтобы стать программистом?
Первые шаги в Unity
Не использовали Unity раньше? Ознакомьтесь с траекториями и ресурсами обучения, которые помогут вам развить навыки и начать работу над проектами RT3D.
Узнайте все о VR-разработке с новой траекторией Unity Learn. Подробнее
Воплотите свои идеи
Unity — это не просто движок, а ведущая платформа разработки и поддержки интерактивного RT3D-контента. Разработчики игр, от программистов до художников, архитекторов, дизайнеров автомобилей, режиссеров и других специалистов, используют Unity для воплощения своих идей.
Получить Unity
Для начала загрузите и установите редактор Unity.
Unity Personal
Начните творить сегодня с бесплатной версией Unity
Unity Personal доступна любителям, индивидуальным предпринимателям и небольшим организациям с оборотом или объемом привлеченных инвестиций не больше 100 000 $ за последние 12 месяцев.
План Student
Бесплатный доступ к Unity Pro
Получите доступ к платформе разработки 3D-контента реального времени и к рабочим процессам, которые используются для разработки иммерсивных приложений в самых разных отраслях. Бесплатно для студентов.
План преподавателя
Бесплатный доступ к Unity Pro
Обучайте студентов RT3D-разработке и готовьте их к успешной карьере с помощью профессиональных инструментов и навыков. Бесплатно для преподавателей.
Учитесь
Обучитесь RT3D-разработке с помощью ресурса Unity Learn, на котором доступно более 750 часов бесплатного обучающего контента.
Траектория «Основы Unity»
2-недельный курс для новичков в Unity
Эта траектория обучения позволяет получить знания и базовые навыки, необходимые для того, чтобы начать уверенную разработку в Unity Editor.
Младший программист
12-недельный курс для будущих программистов
Эта комплексная траектория обучения предназначена для тех, кто хочет научиться программировать или получить должность профессионального Unity-разработчика начального уровня.
Creative Core
10-недельный курс для художников
Эта траектория обучения позволяет получить навыки работы с визуальными эффектами, анимацией, звуком, интерфейсом и не только без написания кода.
Траектория «Разработка VR-приложений»
6-недельный курс для начинающих разработчиков VR-приложений
Эта траектория обучения предназначена для тех, кто хочет научиться создавать VR-приложения.
Общайтесь
Присоединяйтесь к сообществу разработчиков Unity, чтобы получать рекомендации и ответы на вопросы, делиться знаниями и обмениваться идеями.
Ответы Unity
Полезная информация в формате «Вопрос-ответ».
Просмотрите вопросы и ответы от разработчиков Unity любого уровня или задайте вопрос сами.
Форум Unity
Общение и горячие дискуссии с участниками сообщества
Присоединяйтесь к беседам на разные темы, делитесь своим мнением или наработками, получайте отзывы сообщества и общайтесь с единомышленниками.
Группы Unity
Познакомьтесь с другими учащимися
Зарегистрируйтесь в местной группе, чтобы формировать отношения и обмениваться опытом работы в Unity с другими учащимися и специалистами.
Черпайте вдохновение
Готовы начать свой первый проект, но не знаете, что разрабатывать? Ознакомьтесь с увлекательными проектами и историями разработчиков, чтобы оценить возможности RT3D.
Демонстрация социальных проектов
Социально значимые проекты на базе RT3D
Ознакомьтесь с инновационными, социально значимыми проектами и их разработчиками, которые вдохновят вас на творчество.
Новостная рассылка Social Impact
Идеи по почте
Подпишитесь на нашу рассылку, чтобы получать новости о грантах и других инициативах программы Unity Social Impact, а также узнавать о выдающихся разработчиках и их впечатляющих проектах.
Блог Unity
Узнавайте новости первыми
Следите за блогом Unity, чтобы не пропустить новости о последних профилях, объявления, достижения разработчиков, технические советы и многое другое.
Другие полезные ресурсы для тех, кто начинает работать с Unity
Гранты для социально значимых проектов
Создание компьютерной игры без программирования
Использование навыков программирования в Unity
Создание 2D- и 3D-игр в Unity
Популярные проекты, созданные в Unity
Программирование на C# в Unity для начинающих
Начните творить
Воплотите свои идеи в Unity. Начните обучение сегодня с нашими бесплатными лицензиями и образовательными онлайн-ресурсами.
Социальная
Copyright © 2024 Unity Technologies
- Legal
- Privacy Policy
- Cookies
- Do Not Sell or Share My Personal Information
- Настройки файлов cookie
Unity, логотипы Unity и другие торговые знаки Unity являются зарегистрированными торговыми знаками компании Unity Technologies или ее партнеров в США и других странах (подробнее здесь). Остальные наименования и бренды являются торговыми знаками соответствующих владельцев.
Мы используем cookie-файлы, чтобы вам было удобнее работать с нашим веб-сайтом. Подробнее об этом можно узнать на странице, посвященной политике использования cookie-файлов.
Переход на Unity: как программисту попасть в геймдев
Привет! Я — Алексей Науменко, .NET Developer в Plarium Kharkiv. Я хочу рассказать о том, как начинал свою карьеру, и посоветовать, с чего разработчику начать изучение Unity.
Unity3D — один из самых популярных игровых движков. В последние годы всё больше отличных игр выходят благодаря тому, что Unity прост в использовании и предлагает разработчикам много готовых решений.
Как я начал программировать
Я учился в ХАИ по специальности «Телекоммуникации». У нас был преподаватель, который конструировал беспилотники. Благодаря ему уже на курсе я начал писать простой код на С для микроконтроллеров, которые управляют передачей данных с земли на БПЛА. Тогда я решил, что нужно выучить какой-то актуальный язык программирования, чтобы писать на нём постоянно, а не только для решения узких задач.
Выбирал я между С# и Java: читал книги по этим языкам, но потом просто открыл Visual Studio и Java IDE и сделал выбор в пользу первого по «обертке». Не самый правильный способ анализа преимуществ и недостатков, но о выборе я не жалею.
Почему пошел в геймдев и выбрал Unity
В классах мы с другом пытались сделать игру. И хотя получилась ерунда, романтика процесса осталась со мной. К тому же я люблю играть, особенно в древние RPG.
После университета я работал в нескольких продуктовых компаниях: год занимался веб-программированием, потом 4 года разрабатывал ПО для call-центров. Но меня всё время преследовала идея попробовать себя в разработке игр. Так что в свободное от работы время я стал думать, какой движок использовать для будущей игры.
Многие разработчики используют Unity и Unreal Engine, но я хотел изучить все варианты. Поэтому я стал разбираться, на чем написаны популярные проекты. Оказалось, что это либо самописные движки, как, например, у Naughty Dog, либо движки, о которых очень мало информации в интернете — чтобы работать с ними, нужно, скорее всего, некоторое время работать в индустрии и знать хотя бы общие принципы построения игровых движков.
Я вернулся к выбору между Unity и Unreal Engine. И так как на тот момент я уже 4 года программировал на .NET, выбор был прост: в Unity есть C#, а в Unreal Engine — нет. Еще один плюс Unity: я погуглил некоторые интересные мне вопросы и почти на все из них нашел попытки ответить. Пусть не всегда профессиональные, но информация была, и было с кем ее обсудить.
У Unity есть аналог StackOverflow — Unity Answers. Там очень просто найти ответы на конкретные вопросы на начальном этапе, поэтому порог входа очень низкий, особенно если человек понимает хотя бы общие принципы программирования.
С чего начать обучение
Я изучал уже решенные задачи, похожие на те, что интересовали меня. Однажды я искал конкретное решение, но не нашел его в Asset Store. Поэтому начал мониторить форумы и наткнулся на парня, который делал именно то, что мне было нужно, но в Store его решение не пропустили по каким-то требованиям. Я написал ему сообщение и предложил купить его наработку. Он очень обрадовался возможности подзаработать — это был румынский десятиклассник. Чуть ли не лучшее мое вложение в изучение движка: 10$ плюс столько же за Swift-платеж.
Новичку полезно посмотреть, как работают над задачами другие люди, даже если это что-то примитивное. Ведь решений может быть множество. Когда начинаешь, как будто шаришь пальцами в темноте. Ты не знаешь, насколько удачно выбранное решение: возможно, с его реализацией возникнут проблемы в будущем или есть более простой вариант.
Всегда лучше ориентироваться на какой-то пример. Я распотрошил покупку: там было много наворочено, но я переделал это решение под свои нужды. Пока разбирал этот пример, многие вопросы начального уровня отпали. Так начал понимать основные принципы работы с Unity и продолжил разбираться с возможностями движка.
За месяц-полтора изучил базу, но не поверхностно, а достаточно предметно — то, что было нужно на тот момент. Сначала возникло очень много вопросов, как и с любой новой технологией. Я смотрел нативный код и читал мануалы, чтобы разобраться, почему что-то работает в Unity именно так, а не иначе. Но, конечно, будет тяжелее и дольше, если нет конкретных задач и ты не понимаешь, зачем это делаешь.
Нет смысла изучать Unity просто так — стоит начинать с решения конкретных проектных задач. Лучше сразу определиться: «Я хочу сделать Pac-Man». Начинаешь думать, что для этого понадобится: например, нужно реализовать управление персонажем. Желтое существо ест белые точки. Существо должно понимать, что наткнулось на съедобный объект — значит, нужно начать с определения соприкосновения съедобной точки с Пакменом. Тогда появляется конкретная проблема и необходимость искать пути ее решения — а это, по-моему, и есть лучший способ изучения технологии.
Переход с .NET на Unity на практике
Когда мы собеседуем кандидатов, прямо говорим, что не проверяем знания Unity, а фокусируемся на .NET. На практике мы убедились: человека, который знает .NET, гораздо легче обучить работе с движком, чем того, кто начал изучать язык параллельно с Unity.
Поэтому приглашаем на собеседования людей, которые знают .NET и просто хотят работать на Unity. Дальше всему обучим.
Иногда мы собеседуем Senior или Middle+ .NET программистов, которые не знакомы с Unity вообще. При этом человек не переходит на позицию Junior, потому что в Plarium, да и в работе с движком, нет понятия Unity Junior. Если с .NET всё хорошо, освоить движок будет очень просто.
Что почитать
Кроме Unity Answers есть еще UnifyWiki. Можно декомпилировать код и посмотреть результат (он не обфусцирован).
На старте очень пригодились форумы (answers.unity3d.com и forum.unity3d.com). Также я читал книгу Game Engine Architecture Джейсона Грегори. Автор в ней не говорит конкретно о Unity, но подробно рассматривает составные части и особенности игровых движков в целом. Он в деталях описывает, из чего состоит движок, какая математика нужна, как устроен рендеринг. Эта книга расширяет представление о Unity: я начал понимать, что в этом движке есть или должно быть, что с него спрашивать. Единственная трудность — для прочтения этой книги нужно быть очень мотивированным: она не нудная, но достаточно объемная.
Преимущества работы с Unity
Большие компании любят Unity за кроссплатформенность. Если ты что-то написал, оно билдится и под iOS, и под Android — пусть и с надстройками, но зато сразу работает без особых плясок. Конечно, если это не касается платежки 🙂
В нашем случае преимущество также в том, что Plarium — официальный партнер Unity с поддержкой уровня Enterprise Support. Нам не только быстро отвечают на запросы, но и предоставляют больше открытого кода, и мы можем сами что-то вскрыть и допилить.
Надеюсь, информация будет полезна тем, кто планирует работать с Unity. Успехов!
Подобається Сподобалось 0
До обраного В обраному 0