Как программировать на Unity

Unity — отличный инструмент для создания всего, от игр до интерактивных визуализаций. В материале мы рассмотрим некоторые моменты, которые нужно знать, чтобы начать работу. Статья предназначена для всех, кто никогда раньше не использовал эту среду, но имеет опыт программирования или веб-дизайна. К концу этой статьи сформируется общее представление о движке, а также о его функциях.

Межплатформенная среда используется для создания игр различных жанров и направлений. Продукт получается вариативным и расширяемым. Unity представляет собой движок с кучей физики, анимации и инструментами 3D-рендеринга в реальном времени. Среда имеет полную поддержку дополненной и виртуальной реальности.

Окно редактора Unity

В программе можно создать новый или открыть существующий проект. Интерфейс среды делится на несколько блоков. Если вы уже знакомы с основными блоками, то можете пропустить следующие несколько строк.

  1. Сцена (Scene). Позволяет размещать объекты на сцене, перемещать и трансформировать их.
  2. Проект (Project). Здесь хранятся картинки, текстуры, скрипты и все, что может использоваться в проекте.
  3. Иерархия(Hierarchy). Здесь перечислены в порядке иерархии те объекты, которые есть на сцене.
  4. Игра (Game). Позволяет увидеть, как будет выглядеть игра глазами игрока.
  5. Инспектор (Inspector). В графе можно найти подробную информацию об объекте на сцене.

Игровые объекты

Пример объекта — яблоко

В Unity игровым объектом (GameObject) является все, что можно помещать на сцену. Это единицы, которые являются основным строительным блоком движка. Понятие игрового объекта очень обширно, им могут являться как статические, так и подвижные предметы, элементы освещения и даже камеры обзора.

Если проводить аналогию с веб-дизайном, то игровые объекты похожи на блочные контейнеры, формирующиеся тегом <div>. Если поработать с простыми объектами, как и с контейнерами, они смогут выполнять сложные функции.

Кнопка создания и редактирования объектов находится в верхней части панели управления и имеет одноименное название — GameObject.

Работа с иерархией

В иерархии отображаются все объекты, расположенные на сцене, независимо от того, видны они игрокам или нет. Объекты можно объединять в блоки, с которыми удобнее работать. При удалении блока будут удалены все объекты, из которых он состоит.

С точки зрения позиционирования, в среде также есть удобные инструменты. Например, если нужно сохранить положение одного объекта относительно другого. Рассмотрим это на примере. Итак, вы создали питомца, который все время должен находиться рядом с игроком, где бы он ни был. В таком случае его нужно создать как дочерний объект, привязанный к основному — игроку.

Компоненты

Как вы уже поняли, игровые объекты бесполезны сами по себе. В движение они приводятся при помощи компонентов. Именно они являются функциональной частью и отвечают за то, что происходит в игре. Это своего рода скрипты, которые могут быть написаны на C# или Javascript.

Проще говоря, игровые объекты — актеры, а компоненты — это сценарии, по которым они играют свои роли. Процесс создания игр представляет собой сбор пазлов. Сначала нужно создать множество отдельных элементов и повторяющихся компонентов с различными настройками, и только потом эти небольшие компоненты собираются в большие страницы.

Преимуществом такого подхода является повторное использование и четко определенные каналы связи между элементами. В разработке игр важно минимизировать риск непреднамеренных ошибок. Они имеют тенденцию выходить из-под контроля, поэтому их сложно найти и устранить. Таким образом, создание небольших, надежных и многократно используемых компонентов имеет решающее значение.

Ключевые встроенные компоненты

Ниже вы найдете примеры некоторых встроенных компонентов, которые предлагаются в базовой версии Unity.

  1. MeshFilter. Меш фильтр считывает геометрию объекта и передает ее для отображения.
  2. MeshRender: Позволяет отображать ассеты (объекты) для 3D-сетки.
  3. Collision Module. Позволяет контролировать то, как объекты ведут себя во время столкновений и взаимодействий с твердыми объектами.
  4. Rigidbody. Присваивает объекту свойства физического твердого тела, позволяет физическому моделированию воздействовать на объекты.
  5. Light. Позволяет добавить на сцену источники света.
  6. Камера(Camera). Определяет, как будет выглядеть сцена глазами игрока.

Что находится на сцене и что показывает камера

Платформа предусматривает наличие массы других компонентов, но это основные, которые точно пригодятся. Если вы хотите изучить компоненты и другие аспекты программирования подробнее, то можно воспользоваться вкладкой Help. Здесь представлена информация о возможностях программы и ее функциях. В разделе справки находятся подробные материалы, которые помогут начинающему лучше узнать программу или ее отдельные компоненты.

Создание компонентов

Встроенные компоненты направлены на контролирование физики и визуальных эффектов, но их недостаточно для разработки полноценной игры. Потребуется создавать собственные компоненты, которые бы делали проект детальнее, а игру — реалистичнее.

Для создания нового компонента нужно открыть необходимый объект и нажать Add Component. После этого потребуется ввести имя нового компонента. Для того чтобы задать функции, используются упомянутые выше языки программирования.

Структура класса MonoBehaviour

Все скрипты наследуются от класса MonoBehaviour. Он включает в себя несколько стандартных функций, прописываемых в коде. Это:

  • void Start (), который вызывается всякий раз, когда объект, содержащий скрипт, создается на сцене. С помощью этой функции можно создать, например, экипировку игрока после его появления в игре или определенной локации.
  • void Update (), который вызывается каждый кадр игрового процесса. Посредством этой функции описывается каждое изменение состояния игры. Вот где будет содержаться основная часть кода.

Применение функций.

Переменные инспектора (Inspector)

Инспектор отображает свойства выбранного объекта, позволяет редактировать его расположение, компоненты и скрипты. Например, каждая модель оружия из доступных в игре должна отличаться по скорострельности, точности и другим параметрам. Но, по сути, изначально все оружие одинаково.

Однако при помощи изменения свойств и скриптов можно сделать компоненты максимально гибкими. Со значениями параметров можно экспериментировать как во время редактирования, так и во время выполнения функций. В этом разделе редактируются и другие опции, например когда нужно сделать так, чтобы игра откликалась на изменение положения мыши или тачпада.

Принятие пользовательского ввода

Игра должна откликаться на действия пользователя и введенные им данные. Наиболее распространенные способы сделать это — использовать следующие коды в функции Update () компонента:

  • GetKey (KeyCode.W). Пока пользователь зажимает клавишу W, происходит целевое действие. Например, автовыстрел.
  • GetKeyDown (KeyCode.W). Целевое действие совершается при первом нажатии клавиши.

Есть множество особенностей при работе с функциями. Например, в случае, если использовать вместо Input.GetKey Input.GetAxis или Input.GetButton, то в конечном продукте пользователь сможет переназначать клавиши для обеспечения комфорта игрового процесса.

Управление игровыми объектами

Когда пользователь взаимодействует с игрой, важно, чтобы игровые объекты откликались на это. Можно выделить несколько типов ответов:

  1. Вращение и масштабирование.
  2. Создание новых игровых объектов.
  3. Действия с существующими игровыми объектами и компонентами.
  4. Трансформация.

Действия с объектами.

Как правило, рекомендуется использовать локальное, а не глобальное положение/вращение объекта. Это облегчает перемещение, поскольку ось локального пространства будет ориентирована и центрирована на родительском объекте, а не на положении мира.

Создание новых игровых объектов

Поскольку GameObjects — это практически все предметы на сцене, вы можете создавать их на лету. Например, у вашего игрока есть какой-то пусковой механизм, для которого нужно создавать снаряды. Эти объекты будут иметь свою логику полета и наносить определенный урон. Такие объекты можно создавать, просто перетаскивая их в иерархию сцены из папки проекта.

Это будут префабы, шаблоны с одинаковой конфигурацией, предназначенные для многократного использования. Ниже вы найдете пример многократного использования блоков, некоторые из которых сгруппированы. К каждому такому объекту можно прикрепить компоненты кода с различными параметрами.

Одинаковые деревья-шаблоны

Для каждой игровой локации понадобится довольно много объектов и компонентов. Если эти материалы уже есть в наличии, то переместить их на сцену и настроить не составит труда.

Raycasting

Рейкастинг представляет собой метод, в рамках которого можно направить луч из камеры в точку в пространстве. Это делается, например, для того чтобы игрок мог увидеть детали объекта и приблизить его. Кроме того, метод пригодится и в других случаях.

Луч позволяет обнаружить место, куда попадет игрок во время стрельбы или применения оружия ближнего боя. При использовании каждого отдельного инструмента дальность луча можно настроить, например для того, чтобы ближнее оружие поражало только на определенном расстоянии. Кроме того, с помощью рейкастинга можно добавить возможность выбирать юниты в стратегической игре.

На начальном этапе достаточно знать о том, что такая возможность существует, а вот чтобы начать пользоваться ею, придется детально изучить все аспекты. Например, лучи будут взаимодействовать только с объектами, к которым прикреплен соответствующий компонент.

Расширенные возможности

На этом движке есть масса дополнительных возможностей. Мы не будем сейчас вдаваться в подробности, но перечислить их стоит. Так пользователи будут знать, что такие инструменты для работы есть, и смогут детально изучить их.

Создание интерфейса (UI)

В Unity предусмотрено достаточно инструментов для создания пользовательского интерфейса будущей игры. Эти инструменты можно комбинировать между собой самыми разными способами, создавая эргономичные и понятные интерфейсы для игры на устройствах с различным разрешением экрана.

Рассмотрим это на примере простого интерфейса из трех кнопок. Изначально клавиши располагаются на определенных точках относительно центра прямоугольника, но если пользователь перевернет смартфон, то клавиши хоть и не поменяют свое положение относительно центра, все же сместятся в глазах игрока.

Эти особенности нужно учитывать при разработке игр, особенно в случае, если нужно получить сложный интерфейс с рядом клавиш и несколькими подпунктами каждой из них.

Расширение редактора Unity

Unity дает возможность добавлять пользовательские кнопки в инспектор. Это позволяет влиять на мир в режиме редактирования. Кроме того, можно добавлять новые пользовательские окна с определенными параметрами. Для этого используется Property Drawers, где можно задать внешний вид элементов.

Анимация

Движок имеет систему анимации на основе графиков, которая позволяет смешивать и контролировать анимации на различных объектах, таких как игроки. Система поддерживает множество аспектов создания анимированного персонажа, включая принцип тряпичной куклы (rag-dolls).

Действия персонажа в игре будут выстраиваться на основании его перемещения в пространстве конкретной сцены и анимации, которой это перемещение сопровождается. Редактировать также можно и аспекты проигрывания, например скорость и время.

Полезные советы

Если вы планируете написать свою первую игру, не стоит недооценивать сложность процесса и время, необходимое для создания даже самых простых элементов. Помните, что большинство игр, которые выходят на рынок, потребовали многих лет командной работы.

Для начала стоит выбрать простую концепцию и разбить ее на небольшие, вполне достижимые этапы. Рекомендуется разделить игру на как можно более мелкие независимые компоненты. Выполняя небольшие действия строго поэтапно, у новичка гораздо меньше шансов столкнуться с ошибками. Кроме того, сами компоненты лучше хранить отдельными блоками, чтобы при необходимости быстро вернуться на любой удачный этап разработки.

Прежде чем начинать разработку, можно посмотреть примеры простых игр, написанных на этом движке. Сейчас много общедоступных обучающих видео, в которых можно найти массу полезных советов. Кроме того, не помешает изучить тематическую литературу. Кто-то может посчитать это тратой времени, но фактически детальная подготовка помогает избежать сложностей.

Не нужно бояться обратиться к готовому решению, если вы столкнулись с трудностями. Посмотрев, как другие решали аналогичные вопросы, вы, скорее всего, найдете подходящее решение быстрее, чем дошли бы до этого методом проб и ошибок. Так процесс создания игр станет гораздо проще и результативнее. Не бойтесь пробовать, особенно если начальные знания в дизайне и программировании уже есть. Запасшись терпением и необходимыми знаниями, освоить среду создания игр гораздо проще.

Как программировать на Unity
Рейтинг 3/5 (7 голосов)

Об авторе

Игорь Сердюченко

Специалист в области программного обеспечения, локальных сетей, безопасности данных. Разработчик веб-сайтов и мобильных приложений. Администратор работы служб технической поддержки и серверов.

Оставьте свой комментарий