Некоторое время назад я планировал сделать цикл статей с таким названием, но всё пошло немного не так. Дело в том, что Юнити долгое время казался мне каким-то мутным игровым движком, а самое главное, с совершенно другой философией, чем я привык. И поэтому я думал, что освоить его будет проблематично. Отсюда и название.
Так что же пошло не так? Оказалось, что Unity – вполне понятный и дружелюбный, как к пользователю, так и к программисту, движок, и я смог работать с ним прямо сразу без каких-либо трудностей. Поэтому "ни бум-бум" уже не отвечает действительности.
Unity vs. Flash
Долгое время я работал с Flash, конкурентом которого был Юнити. Когда дело доходило до 3D-графики, Юнити обгонял Flash, хотя и на флэше были какие-то зачатки 3D, которые могли бы вырасти в полноценную платформу, но не получилось.
Когда я познакомился с Unity, то обнаружил, что он во многом напоминает Flash. Кроме того, язык C#, который используется в Юнити, очень похож на флешовый ActionScript 3, так что и здесь нет особых проблем. Я начал писать на До-диезе просто сразу, хотя раньше никогда не писал на нём.
Подготовка среды
Не буду здесь ничего особо расписывать, так как всё абсолютно стандартно. Нужно открыть ссылку unity.com/download и скачать Unity Hub. Это приложение, которое заведует скачиванием всех остальных приложений. Установив его, вы можете скачать собственно редактор Unity.
IDE для С#
Также потребуется среда для редактирования файлов C#. Unity не предоставляет собственного редактора. В принципе, редактировать их можно где угодно, хоть в блокноте. Но если нужна подсветка синтаксиса и ошибок, автоформат и прочее, то нужно установить какую-нибудь IDE, которая умеет работать с C#. Их много, например MonoDevelop, Raider, Visual Studio Code.
Сначала я поставил Raider, но потом он мне не понравился своим поведением и я поставил VSCode. В общем, абсолютно всё равно. Когда вы открываете в Юнити .cs-файл, просто запускается соответствующий редактор для него. Если не запускается, нужно настроить в системе приложение по умолчанию для открытия этого типа файлов.
Редактор Unity
Первый шаг это создание нового проекта. Существуют предопределённые шаблоны для разных типов проектов, и я пока выбираю 3D Core, чтобы там не было ничего лишнего.
После создания проекта мы увидим главное окно редактора:
По центру находится "окно в мир". Так как Юнити это визуальный игровой движок, в нём по умолчанию присутствует некое пустое пространство, в которое мы можем смотреть.
Это пространство называется сценой. Как только мы добавляем на сцену какой-либо объект, то сразу же начинаем его там видеть. Естественно, если этот объект имеет визуальное представление.
То есть, чтобы сделать игру, достаточно просто накидать нужных объектов на сцену и заставить их двигаться и взаимодействовать.
Обратите внимание, что у отображения сцены есть две закладки: Scene и Game, и сейчас выбрана Game. Это вид, который мы видим непосредственно в игре.
Слева находится панель Hierarchy. Это древовидная иерархия всех игровых объектов. Сцена – корневой элемент. А к ней прикреплены: Main Camera (главная камера) и Directional Light (направленный свет). Эти два объекта – тот минимум, который нужен для визуалиации.
Сейчас сцену мы просматриваем именно через главную камеру. То есть в проекте должна быть хотя бы одна камера. А свет нужен для того, чтобы объекты не были чёрными. Выбрав слева или камеру, или свет, в правой панели (Inspector) мы можем посмотреть и изменить их свойства.
Переключимся в закладку Scene:
Теперь мы смотрим на сцену не через камеру, а "изнутри", в рабочем режиме. Можно видеть разметочную сетку и выбранный объект – камеру. А рядом с ней можно увидеть объект-свет. Объекты можно двигать мышкой внутри сцены либо менять их координаты в правой панели. Сцену можно крутить правой кнопкой мыши, а приближать и удалять колёсиком.
Повороты сцены не влияют на вид в камере, так как это рабочее окно редактора, а не сама игра. Чтобы изменить вид в камере, нужно двигать или поворачивать саму камеру.
Попробуем добавить на сцену 3D-объект. Для этого нужно в панели иерархии нажать правую кнопку мыши, чтобы вызвать контекстное меню:
И вот на сцене появилась сфера.
Переключимся в режим камеры. Так это будет выглядеть в игре:
Сфера кажется слишком маленькой, хотя конечно непонятно, для чего она вообще. Чтобы сделать её больше, можно либо увеличить саму сферу, либо придвинуть её ближе к камере. Я придвигаю ближе, меняя кординаты:
Обратите внимание на панель Inspector и цифры в ней. "Единицей" в Юнити считается один метр. Данная сфера имеет диаметр 1 метр и находится на расстоянии 3 метра от камеры.
Для игр это довольно условные понятия, так как можно сделать все объекты в 10 раз больше или меньше, и никакой разницы видно не будет. Но размер объектов играет роль в физических симуляциях.
Огромные объекты будут вести себя как огромные, а мелкие как мелкие. Поэтому, если вы хотите иметь в игре реалистичную физику, все объекты должны быть приближённого к жизни размера.
Play
Сверху над панелью сцены есть кнопка "Play". Если на неё нажать, мы фактически запустим игру и увидим, как она работает:
Очевидно, что работает она пока никак. Просто в центре экрана висит белая сфера, и всё. Тем не менее мы имеем уже полноценное приложение, в котором без всяких усилий получены камера, 3D-объект и освещение.
Чтобы объекты в игре могли что-то делать, им нужна игровая логика, которая реализуется через скрипты. В следующем выпуске я сразу замахнусь на генерацию ландшафта, так как мне это нужно.