Как создать строительство в юнити

Содержание

В данной статье я постараюсь описать процесс написания параметрического генератора зданий внутри игрового движка Unity.

Готовое здание

Готовое здание

Статья разделена на следующие разделы:

Описание базовой логики

Примеры структуры кода

Вид требуемых моделей

1. Описание базовой логики

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

Само здание может быть поделено на следующие составляющие:

Передний и задний фасады

Торцевые или боковые фасады

Теперь перейдем к непосредственной логике построения частей здания.

Пример первого цикла

Как создать систему строительства в юнити | Логика

Пример первого цикла

В данном случае мы создаем объекты в координатах кратным шагу nTile и числом равному nNumber. То есть создается цикл nTile*nNumber, где n-выбранная ось. В цифрах или координатной сетке это будет выглядеть так (для шага кратному 1): 0,1,2,3,4.

В дальнейшем будут использоваться оси Unity: X — длина, Y — высота, Z — ширина.

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

Пример цикла фасада

Пример цикла фасада

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

Создание заднего фасада

Создание заднего фасада

Торцевые фасады создаются аналогичным образом, используя при этом оси построения стен Y и Z и значение длины для определения позиции стены.

Значения длины, ширины и высоты здания являются умножением шага на число повторов цикла, т.е. nDimension = nTile * nNumber.

Создание кровли идет отдельно, по осям X и Z (длина и ширина). В текущем виде генератора определение последнего этажа происходит из-за иной логики построения цикла, поэтому этап отделения кровли можно считать законченным.

Далее стоит обозначить и отделить следующие модули: первый этаж, последний этаж и углы.

Первый этаж определяется как нулевое число по высоте для всех видов фасадов. Последний же как само число высоты (zNumber).

Углы для фасадов как первое и последнее число, повторенное по высоте, в циклах длины и ширины соответственно.

Определение угловых элементов

Определение угловых элементов

Углы кровли идут двойным блоком: первое и последнее число длины и ширины. То есть для кровли мы определяем все 4 угла, в то же время как для фасадов всего 2 на стену.

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

Финальный вид здания с определенными модулями будет выглядеть так:

Модули здания

Модули здания

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

2. Примеры структуры кода

В данном разделе будут примеры кода для всех основных элементов здания, включающих в себе создание цикла стен, кровли, разбиение стен и кровли на модули.

Начнем с простого цикла.

Создание объекта в Юнити идёт путем инстанцирования (Instantiate) и введения параметров трансформации.

Для того чтобы повторить этот объект необходимое количество раз и добавить к каждому новому объекту инкрементальную трансформацию необходим цикл for:

Следует пояснить, что создание любого объекта через скрипт требует привязки скрипта к объекту в сцене Юнити. Зачастую такими выступают пустые объекты. Именно такой объект является источником данных для позиции и вращении. Tansform.position и transform.rotation являют собой данные о местоположении и вращении такого объекта. Масштабирование в Юните же происходит иным способом, но об этом позже.

Создадим двойной цикл для целого фасада:

Вот так просто создается целый фасад. Конечно же нужно ввести данные о значениях:

Значения шагов являются неизменными и скрытыми, числа x и y вводимыми переменными.

Далее создадим задний фасад. Для этого в предыдущий код добавим новую строчку.

Для поворота элементов заднего фасада нужно ввести новый вектор с вращением по оси Y.

В данном случае ставится кватернион с созданием нового вектора вращения по оси Y.

Теперь создадим боковые фасады. Как говорилось ранее в разделе 1, торцевые фасады являются копией основных, с разницей в использовании других осей.

Если совместить две пары фасадов, то произойдет наложение угловых элементов, поэтому необходимо вычесть единицу из числа nNumber в цикле for и проверить если нулевой элемент равен числу n.

Создание кровли происходит путем умножения X и Z величин на их шаги.

Базовая коробка готова. Теперь перейдем к определениям первого и последнего этажей.

Первый этаж определяется как нулевое число по высоте, последний же как само число по высоте. Тем самым всё, что не входит в эти условия является элементами основного этажа.

Углы определяются таким же образом, только вместо yNumber берется число основной оси стены: X для переднего и заднего,Z для правого и левого торцов.

Определение углов для кровли требует проверку сразу двух условий, т.к. у каждого угла своя позиция в координационной сетке.

Базовая коробка готова. Теперь перейдем к описанию правил создания моделей для генератора.

3. Вид требуемых моделей

Как было сказано в разделе 1 шаг для цикла составляет 1 единицу. В нашем случае это будет 1 метр. Следовательно общие размеры модели будут равны 1х1м.

В тестовой сборке здания модули будут выглядеть так:

Тестовая сборка здания внутри Blender

Тестовая сборка здания внутри Blender

На изображении можно заметить, что углы имеют другой размер. Поскольку мы используем координационную сетку кратную единице, то и все смещения происходят по логике инкремента +1. При этом pivot объекта находится на границе стены. Хотя сама модель стены посередине сетки. При этом можно изменить модель и сделать стенки на границе сетки координат, но это даст больший размер модулей ( например большие угловые элементы).

Сетка координат с изображением pivot объектов

Сетка координат с изображением pivot объектов

Минимальный набор объектов будет следующим:

Основная стена ( окно )

Угол основной стены

Последний этаж основная стена

Последний этаж угол

Первый этаж основная стена

Первый этаж угол

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

4. Дополнительный функционал

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

Начнем с центрирования здания. Генерируя объект с помощью примеров кода из главы 2 мы обнаружим, что здание начинает строиться из нуля координат (или позиции объекта parent). Чтобы исправить это нам надо вычислить длину, ширину, высоту здания и вычесть эти величины из изначального вектора при создании объекта.

Это позволит сместить объект на половину общего размера по желаемой оси ( длина, ширина, высота). Конвертация во (float) в данном случае нужна для того, что наш шаг кратен 1 и, используя целые числа мы не сможем вычислить точную середину.

Перейдем к рандомизации создаваемых объектов. Самым простым вариантом является использование множества объектов с их рандомизацией. Рассмотрим стены как пример.

Данный код означает, что при создании объекта в координатах мы берем случайный объект из множества равному от нуля до общей длины множества mainWalls. При этом каждый раз будет создаваться уникальный вид здания. Чтобы контролировать это можно ввести понятие seed.

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

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

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

Мы проверяем если случайное число меньше введенного процента, разделенного на 100 (деление на сто необходимо, т.к. проверка процентов происходит от 0 до 1, а вводить удобнее от 0 до 100), то создается случайный объект из множества аксессуаров, в иных случаях будет пустое место.

Добавим внешнюю лестницу. Она использует те же координаты, что и основная стена, но размножение объектов идёт только по высоте (или оси z). Но, из-за особенностей конфигурации текущего алгоритма последний этаж создается в иных циклах for. Из-за чего приходиться создавать копию кода лестницы в сегменте последнего этажа (кровли).

Тем не менее код для лестницы будет выглядеть следующим образом (внутри код любого фасада)

При этом лестница будет точно в таких же позициях как и основные модули стен. Чтобы создать лестницу только в одном выбранном месте необходимо создать условие:

Где stairsPosition будет числом в сетке координат по выбранной оси. То есть лестница будет создаваться только в одном месте по осям X или Z.

Чтобы дать возможность выбирать фасад для создания лестницы необходимо создать переключатель switch и ввести энумератор по строке.

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

Предположим, что лестница состоит из трех элементов: основная, для первого этажа, для последнего этажа. В таком случае в множестве будет всего 3 элемента [0,1,2]. Если предположить, что нулевой элемент это основная лестница, первый — первый этаж, а второй — последний этаж, то при вводе условий проверки этажа можно получить следующие:

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

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

Чтобы ввести такой функционал нужно обращаться к граничащим размерам выбираемого объекта ( bounding box ).

Юнити обращается к коллайдеру выбранного объекта, затем переводит вектор 3 в цельные значения. Таким образом мы получаем размеры длины, ширины и высоты выбранного объекта.

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

Далее при инстанциализации в позиции необходимо добавить значение pickedObjectPosition.position.

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

Генератор использует готовые 3D объекты для создания здания. Но что если потребуется сгенерировать и их? В таком случае необходимо создать новый пустой объект, назначить на него новый скрипт и сгенерировать объект в нем. После же сохранить этот объект как prefab и назначить его как базовый элемент в генераторе здания.

Если мы просто создадим базовый объект по образу здания, то объект не будет получать координаты поворота из генератора, а будет использовать свои собственные ( нулевые ).

Чтобы избежать этого необходимо использовать значения transform.position, transform.rotation, так как они передают вектора позиции и направления при генерации в здании.

Таким образом генератор стены будет выглядеть так:

Чтобы определить брандмауэр (глухая пожарная стена), необходимо ввести всего 1 условие — проверка булеана. Но при этом необходимо будет создать новые объекты стен.

При этом нужно будет внести дополнительное условие при создании лестницы.

Сами объекты для пожарной стены будут выглядеть примерно так:

пример моделей для брандмауэра

пример моделей для брандмауэра

Как видно вводится всего 4 объекта: глухая стена, стена последнего этажа и углы последнего и первого этажей. В них кроется сложность, так как углы здания различаются зеркально, а не только по вращению.

В Юнити, при инстантировании объекта можно ввести параметры перемещения и вращения, но параметра масштаба нет ( как в Unreal Engine например). Для введения такого функционала необходимо обозначить инстантируемый объект как игровой, привязать его в parent’у и затем уже ввести вектор масштабирования. В готовом виде выглядит так:

Таким образом мы изменили масштаб объекта по оси Х на -1, что отразило его зеркально.

Такую операцию необходимо провести для углов последнего и первого этажей.

5. Известные «проблемы»

В текущем виде генератор работает следующим образом: генерирует передний и задний фасады, затем торцевые с вычитанием единицы от числа шага, затем создает кровлю. Всё это усложняется делением на углы, первый и последний этажи для каждого типа. При этом каждый раз необходимо вводить свои циклы for в требуемом количестве. Лучший вариант будет изначальное введение трёх циклов for для каждой оси и создание «полнотелого» куба из объектов, а затем последующее деление и вычитание лишних элементов. Это позволит унифицировать циклы и выходные значения этих просчетов, что скажется на количестве кода в лучшую сторону.

6. Итоги/файлы проекта

В данной статья я постарался описать логику построения генератора здания с примерами кода. Данный генератор может использоваться как для проверки моделирования модульной системы зданий, так и для генерации зданий внутри Юнити.

Источник: habr.com

Создание 3D-города в Unity 5

Sandy Gerber

Sandy Gerber May 19, 2016

What You’ll Be Creating

Unity 3D — это игровой движок с открытым исходным кодом, используемый инди-разработчиками и игровыми студиями. Известен благодаря своему удобному интерфейсу, реалистичной графике и мульти-платформенной публикацией. Этот урок отлично подходит для начинающих или для тех, кто ищет простой способ создать город в Unity.

Загрузка Unity

Давайте начнем, перейдите на сайт Unity и скачайте бесплатный вариант программы. Unity 3D предлагает различные варианты. Как для инди-разработчика, их бесплатный пакет — это именно то, что вам нужно, чтобы начать работу. Нажмите Получить Unity и загрузите пакет, совместимый с вашей системой. Unity совместим с обеими системами Mac и PC, что делает его очень популярным.

Читайте также:  Решение о признании незаконным разрешение на строительство

Очень важно проверить системные требования. По состоянию на март 2016 года, требуется как минимум Windows 7 или Mac OS X 10.8 и выше.

Download UnityDownload Unity Download Unity

Далее вам нужно будет зарегистрироваться. Зарегистрировавшись, вы можете отслеживать свои загрузки и покупки в магазине ресурсов (asset store) Unity. После загрузки Unity запустится. В зависимости от вашей системы, это может занять от двух до восьми минут. После чего откроется диалоговое окно с просьбой ввести учетные данные.

После входа в систему пришло время начать новый проект.

Начните New Project и назовите его «My City». Пока что не выбирайте пакеты.

Обратите пристальное внимание на папку, в которую вы добавляете свои проекты, так как все файлы должны оставаться в одном месте. Оставьте дефолтное расположение для этого проекта. После того, как ваш проект открыт, перейдите в меню File > New Scene и назовите вашу сцену «MyFirstCity».

Интерфейс Unity

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

Learning Unity InterfaceLearning Unity Interface Learning Unity Interface

Давайте начнем с нижней части.

  • На вкладке Project находятся файлы проекта, изображения, текстуры и шаблоны экземпляров (prefabs). Это хорошая практика правильно структурировать ваши файлы с самого начала. Игры требуют тонны файлов для проекта, так что лучше начать должным образом.
  • На вкладке Console вы увидите ошибки кода или предупреждения.
  • На вкладке Hierarchy будут находиться текущие видимые на экране объекты. Каждый проект начинается с Light и Main Camera.
  • На вкладке Scene отображается текущая сцена через основной фокус камеры.
  • Вкладка Game показывает вам, как выглядит ваша игра, когда в нее играют.
  • На вкладке Animator будут добавлены команды вашего контроллера аниматора для вашего персонажа.
  • На вкладке Inspector вы увидите информацию о текущем объекте, например, цвет, текстуру, сценарии и т. д.

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

  • Кнопка Hand (рука) позволяет вам свободно захватывать экран и перемещаться по игровому миру.
  • Кнопка со скрещенными стрелками используется для перемещения объектов. В 3D-мире вы можете перемещаться вверх, вниз, влево и вправо.
  • Кнопка с закругленными стрелками используется для поворота ваших объектов.
  • Кнопка с внешними стрелками используется для изменения размера вашего объекта.
  • Кнопка с квадратом дает вам взгляд со стороны. Когда вы нажимаете правую кнопку мыши, это позволяет включить вид от первого лица в режиме перспектива.

В верхней панели у нас есть File, Edit, Assets, Game Objects, Component, Mobile Input, Window, и Help. Лучший способ изучить меню — это метод проб и ошибок. Позже в этом уроке, мы пройдемся поэтапно по пунктам меню.

Расположение вкладок (Layout)

Setting Up Your Unity LayoutSetting Up Your Unity Layout Setting Up Your Unity Layout

Когда вы впервые откроете Unity, вы увидите расположение вкладок, как на картинке выше. Перейдите в меню Window, затем Layouts, вы можете просмотреть различные варианты компоновки вкладок, доступные в редакторе Unity. Щелкните каждую из них пока не найдете комфортное расположение вкладок.

Вы также можете создать свой собственный layout, щелкнув левой кнопкой мыши на вкладке и перемещая ее куда угодно. В моем случае я использую два монитора, поэтому у меня вкладка Game Scene на одном мониторе, а вкладка редактирования Scene на другом. Поиграйте с ними, пока вы не будете довольны!

Загрузка ресурсов

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

Перейдите в Window и нажмите Asset Store. Откроется вкладка asset store; здесь вы увидите сотни объектов, текстур, персонажей и инструментов Unity. Вы можете приобрести любой предмет, который вам нужен. Хотя в этом уроке я покажу вам, как создавать собственные текстуры, мы также загрузим бесплатные ресурсы. При первом открытии asset store он может попросить вас войти в систему.

Давайте начнем, набрав Yughues Free Concrete Materials в окне поиска. Ваше окно будет выглядеть так, как показано ниже.

Downloading AssetsDownloading Assets Downloading Assets

Теперь нажмите кнопку Download. Через несколько секунд откроется окно. Нажмите Import. В зависимости от вашей системы это может занять от двух до десяти минут. После импорта вы увидите новый ресурс на вкладке Project.

Теперь давайте вернемся в asset store и импортируем City Props Pack. Повторите вышеуказанные инструкции.

Мы также будем загружать skybox. Вернитесь в asset store и импортируйте Wispy Skybox.

Теперь пришло время для наших Unity-пакетов. Перейдите в Assets > Import Package. Нам понадобятся Characters (персонажи), Cameras и Environment (камеры и окружающая среда).

Поиск бесплатных ресурсов

Нам нужны текстуры дороги и здания поэтому соблюдая мои обещание о бесплатных ресурсах, поищем в Интернете. Перейдите в Bing и наберите «road» и после появления некоторых изображений убедитесь, что в разделе License выбрана бесплатная лицензия.

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

Чтобы все было организовано, сохраните свои изображения в папке Unity. Возможно, потребуется найти место хранения файлов; обычно местоположение по умолчанию Компьютер > Документы. Теперь нам нужно приблизительно пять строительных текстур. Нажмите на эту ссылку Bing, чтобы перейти к текстурам, которые использовались для этого проекта. Щелкните правой кнопкой мыши и сохраните в той же папке Unity.

Совет: всегда помните, когда вы используете проекты на коммерческой основе, лучше перестраховаться, чем потом сожалеть. Вы можете посетить такие веб-сайты, как Envato Market, чтобы купить royalty-free-изображения.

Теперь давайте создадим папку на нашей вкладке Project и назовем ее «Artwork». Перейдите в Asset > Import Asset и выберите свое изображение. Переместите изображение в папку Artwork.

Совет: Если вы перемещаете свое изображение после сохранения проекта, возможно, ваше изображение не появится или станет розовым (без текстуры). Когда все ваши ресурсы будут загружены, мы готовы начать создание нашего игрового мира. Нажмите File > Save Scene.

Давайте начнем создавать поверхность

Давайте добавим наш ландшафт. Перейдите в Game Object > 3D Object > Terrain. Это добавит 3D-ландшафт в сцену. Сейчас самое время по переключать меню, чтобы привыкнуть к перемещению по игровому миру.

Совет: если у мышки есть колесико, вы можете использовать его для приближения или отдаления от объекта, щелкнув значок Hand (рука).

Adding A Ground TextureAdding A Ground Texture Adding A Ground Texture

Как только вы добавите ландшафт, ваша сцена должна выглядеть, как на изображении выше. Есть несколько сообщений о глюках шейдера при первом открытии Unity 5. Если ваш проект выглядит как на изображении ниже, не волнуйтесь — мы это исправим! Мы обсудим освещение в другом уроке, но сейчас выберите Terrain, а затем на вкладке Inspector выберите Cogwheel (шестеренку), прокрутите вниз до Material и выберите Built-In Legacy Diffuse. Это должно решить проблему.

Shader Glitch in Unity5Shader Glitch in Unity5 Shader Glitch in Unity5

Положение камеры

Когда вы выбираете объект во вкладке Hierarchy, детали объектов отображаются в окне Inspector (справа). Здесь вы можете вносить изменения в объект, добавлять текстуры, добавлять столкновения и добавлять код.

Давайте вернем камеру в правильное положение. Выберите Main Camera на вкладке Hierarchy. Теперь посмотрите на вкладку Inspector справа, в разделе под Transform вы увидите Position. Введите: 265, 20, 20. Теперь ваша камера должна быть в том месте, где мы этого хотим.

Positioning Your CameraPositioning Your Camera Positioning Your Camera

Пойдем по серой кирпичной дороге

Теперь добавим текстуру к ландшафту. Выберите Terrain на вкладке Hierarchy и нажмите на кисть в окне Inspector. В разделе Textures вы увидите Edit Textures. Щелкните левой кнопкой мыши и выберите Add a Texture, и появится небольшое окно, предлагающее выбрать текстуру. После того, как вы нажмете на это поле, отобразятся текстуры, импортированные из Asset Store.

Дважды щелкните и добавьте ту, которая вам нравится. Я выбрал Dark Concrete.

Взгляд в небо

Если вам нравится, то Unity поставляется со стандартным skybox, который отлично работает. Думаю, что это немного скучно, поэтому я собираюсь добавить skybox, который мы скачали ранее. Нажмите Main Camera и в окне Inspector нажмите кнопку Add Component в самом низу. Введите Skybox и щелкните по кружочку справа.

Откроется окно, в котором вы можете выбрать понравившийся вам skybox, дважды щелкнув его. Теперь, если вы загляните во вкладку Game Scene, вы увидите новый skybox. Пока всё хорошо выглядит!

Если вы создали это

Теперь, когда наша окружающая среда готова, давайте добавим несколько зданий. Перейдите в Game Object > 3D Object > Cube. Сначала вы не увидите куб, потому что он находится на большом расстоянии. Давайте добавим его туда, где мы можем видеть его. Нажмите Cube на вкладке Hierarchy.

Давайте разместим куб, введя значения: 300, 25, 100. Давайте также масштабируем его: 20, 50, 20. Можно использовать инструмент Scale (масштаб) или просто ввести размер в поля. После того, как вы добавили первый Cube (куб), щелкните по нему правой кнопкой мыши на вкладке Hierarchy, чтобы переименовать его. Назовите его Building 1.

Adding A 3D BuildingAdding A 3D Building Adding A 3D Building

Круто. Давайте добавим еще несколько зданий. Повторите вышеописанные действия. Вы увидите дополнительный куб во вкладке Hierarchy как Cube (1), поэтому давайте переименуем его в Building 2, щелкнув правой кнопкой мыши и набрав новое имя. Теперь масштабируем: 20, 70, 20 и позиционируем до: 275, 25, 100.

При добавлении зданий измените масштаб и положение для каждого из них. Следите за тем, чтобы вы удерживаете середину на 25, чтобы они выстроились ровно. Вы можете также использовать панель инструментов для масштабирования и перемещения зданий. Продолжайте это делать до тех пор, пока у вас не будет пять зданий и назовите их последовательно, например, Building 2, Building 3 и так далее. Мои здания располагаются на расстоянии в 25 значений, например: 250, 0, 100, 225, 0, 100 и т. д. Не забудьте сохранить свою сцену!

Совет: Вы также можете щелкнуть правой кнопкой мыши по зданию на вкладке Hierarchy, скопировать и вставить его.

Добавление текстур здания

Теперь мы должны превратить наши кубики в здания. Нажмите на свою папку Artwork на вкладке Project (в которую вы добавили текстуры здания). Выберите текстуру и перетащите ее в поле на вкладке Scene. Вы сразу увидите изменение текстуры во вкладках Scene и Game. Не стесняйтесь настраивать, перемещать и поворачивать здания, пока вы не будете удовлетворены.

Совет: Иногда текстура может быть задом наперед. Это легко исправить, повернуть ось Z на 180.

Создание дороги

Пришло время добавить дорогу. Выберите Game Object > 3D Object > Plane. Поместите ее в значения 250, 0.2, 80. Добавьте поворот по оси Y на 90 и сделайте масштаб 1, 1, 15. Теперь выберите текстуру дороги и добавьте ее к плоскости.

Назовите плоскость Road.

Место для всего

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

Любой город состоит из многочисленных зданий, поэтому давайте сохраним наш квартал. Перейдите в Game Object > Create Empty, и теперь вы увидите новый элемент в Hierarchy (иерархии) под названием GameObject. Переименуйте его в Block1(L). Нажмите Building 1, удерживая клавишу Shift и выделите все остальные здания. Теперь вы можете переместить их все под Block1(L), который становится родителем наших зданий.

Organizing Your Buildings by BlocksOrganizing Your Buildings by Blocks Organizing Your Buildings by Blocks

Копируем

Теперь мы создадим другую сторону улицы. Щелкните правой кнопкой мыши Block1(L) скопируйте и вставьте. Назовите его Block1(R). Положение Block1(R) будет 235, -90, 300.

Теперь вы можете изменить текстуры или загрузить новые, если хотите. При изменении текстуры необходимо щелкнуть отдельное здание, в противном случае будут изменены все текстуры квартала. Переместим Camera (камеру) на 340, 10, 80 и повернем на -80.

Совет: Если вам не нравится способ позиционирования элемента, вы можете перемещать его с помощью инструментов трансформации. Нажмите кнопку сохранить.

Добавление городских декораций

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

Нажмите стрелку вниз в папке City Props Pack на вкладке Project. Прокрутите вниз до папки Prefabs и щелкните стрелку вниз, пока не увидите список объектов. Выберите знак Stop. Когда вы его выберете он будет отображаться в окне Inspector справа.

Перейдем к передней части первого здания. Выберите знак Stop и перетащите его в окно Scene; в зависимости от вашей сцены может понадобиться уменьшить его. Уменьшите масштаб до значений: 0.2, 0.2, 0.2. Отлично!

Давайте проявим творческий подход и добавим больше предметов. Не стесняйтесь выбирать те, которые вам нравятся, и размещать их в любом месте на тротуаре. Помните, что вы можете копировать и вставлять любые объекты на вкладке Hierarchy. В духе упорядочивания объектов, создайте пустой Empty родительский объект под Game Object и назовите его City Props.

Следовательно переместите элементы. Сохраните сцену.

Совет: Помните, что если ваши объекты светятся белым цветом, вам необходимо изменить затенение на Legacy Shaders/Bumped Diffuse.

Добавление деревьев

Теперь пришло время добавить деревья в наш город. Unity поставляется со стандартными деревьями, которые работают замечательно. Вы всегда можете загружать различные типы деревьев из asset store, если вы ищете другой вид.

Нажмем Terrain на вкладке Hierarchy. На вкладке Inspector вы увидите изображение того, что выглядит как дерево под Terrain (ландшафтом) — нажмите на него. В настройках измените Brush Size (размер кисти) на 1. Теперь нажмите Edit Trees > Add Tree. В поле Tree Prefab щелкните по кружочку в конце.

Выберите дерево (я выбрал Broadleaf). Дважды щелкните и добавьте. Теперь вы увидите дерево, которое вы выбрали в поле Trees на вкладке Inspector. При перемещении указателя мыши в окне Scene, за ней будет следовать синий круг. Поскольку Brush size равен 1, вы будете размещать по одному дереву за раз.

Если вы добавите дерево и оно будет слишком большим, вы можете изменить его размер, в разделе Settings, изменив Tree Height (высоту дерева). Если вы допустили ошибку, нажмите Edit Trees и удалите дерево. После этого вы можете начать все заново.

Читайте также:  Техническое задание на поиск земельного участка для строительства

Adding TreesAdding Trees Adding Trees

Добавление персонажа c видом от третьего лица

Итак, наконец-то мы создали свою среду где захотели и теперь пришло время добавить в него персонажа нашего друга Итана, чтобы было кому любоваться городом. Нажмите стрелку вниз в разделе Standard Assets на вкладке Project, затем Characters > ThirdPersonCharacter. Перейдите в Prefabs и перетащите ThirdPersonController в свою Scene (сцену). Установите контроллер на 315, 0.1, 78 и измените размер на 3, 3, 3.

Вы также можете повернуть его так, чтобы он смотрел в нужном вам направлении. Нажмите Play и вы сможете контролировать Итана. Нажимайте кнопки со стрелками на клавиатуре и бегайте вокруг.

В какой-то момент вы заметите, что он уходит за пределы экрана, поэтому нам нужна камера, чтобы следовать за ним. На вкладке Hierarchy выделите Main Camera (главную камеру) и перетащите ее под пункт ThirdPersonController. Теперь ваша Main Camera должна стать дочерним элементом ThirdPersonController. Теперь, когда вы нажмете Play, камера будет следовать за Итаном.

Добавление контроллера с видом от первого лица

Мы также можем посмотреть на наш игровой мир в режиме от первого лица. Перейдите на вкладку Project. Выберите Standard Assets, Prefab, FPS Controller. Перетащите его в свою сцену, поверните и масштабируйте. Перед тем, как начать игру, важно отметить, что FPS поставляется с собственной камерой, поэтому вам нужно будет удалить MainCamera.

Совет: Если ваш персонаж проваливается сквозь землю, вы, вероятно, располагаете их слишком низко. Дважды щелкните значок на вкладке Hierarchy и вы увидите крупный план на вкладке Scene. Переместите контроллер вверх с помощью стрелки или или измените положение по оси Y на 1.

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

Источник: gamedevelopment.tutsplus.com

Как создать игру на Unity

Эксперт в медицинских тренажерах VR на Unity, физических симуляциях и сетевых играх.

Сделать игру на Unity сможет даже начинающий кодер, который не знает С#. Большое количество обучающих материалов и активное комьюнити значительно облегчают первые этапы знакомства с движком и создание первого проекта. Вместе с ведущим разработчиком Unity Владимиром Филимоновым и преподавателем на курсе «Разработчик игр» разбираемся, почему писать код — не главное в геймдеве и какие базовые инструменты нужно освоить, чтобы соорудить свою первую игру.

Что такое Unity

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

Наглядный пример игры, созданной на Unity, которая поддерживает разные устройства, — Genshin Impact, успешный мультиплатформенный проект китайской студии miHoYo Limited. Более популярной стала ее мобильная версия, но пользователи могут войти в аккаунт, например, с компьютера и продолжить играть с того же момента, на котором остановились в мобильной версии. Кроме Genshin Impact, на Unity созданы такие известные проекты, как Hearthstone, Outlast, Cuphead, Pokemon GO и многие другие.

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

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

Посмотрите также: Как установить Unity

Как создать простую игру

При создании собственного проекта важно помнить, что разработка кода — это примерно 20% игры; гораздо большее значение в ней имеют другие аспекты:

  • Геймплей — это общее понятие взаимодействия игрока с игровым миром, которое определяет его действия (бежать вперед, преодолевать препятствия, стрелять по мишеням, обгонять других) и цели (прийти первым к финишу, выбить 10 из 10, победить врага в бою, собрать как можно больше монет). Геймплей напрямую связан с жанром игры, так как у каждого из них есть специфичный набор правил и механик.
  • Игровые механики— конкретные элементы взаимодействия с игрой, которые входят в состав геймплея. Стрельба — это одна механика, сражение на мечах — другая, гонка — третья. Одна игра может сочетать в себе десятки таких механик.
  • Сюжет— это развитие действия в игре; он одинаково важен и для масштабных AAA-проектов, и для небольших, но глубоких инди-игр. Сюжет должен затянуть игрока, рассказать ему историю, а также развивать персонажей, чтобы они не оставались однобокими и раскрывались для игрока с новых сторон.
  • Персонажи — в них важны и дизайн, и характер. Удачно проработанный персонаж обладает узнаваемыми особенностями поведения, интересной историей, а еще для полного погружения он должен иметь что-то общее с игроком, что зацепит его и заставит сопереживать. На эту тему Unity разработали гайд «Пять типов привлекательных игровых персонажей», чтобы у новичков получалось сделать игрового персонажа правдоподобным.
  • Дизайн уровней— это внешний вид игры, цветовые решения, общая стилистика объектов, фона, персонажей, предметов, которая создает определенное настроение. В помощь начинающим разработчикам Unity опубликовали в своем блоге «Советы по дизайну уровней вашей первой видеоигры».
  • Баланс — это соотношение характеристик разных объектов, он тоже отвечает за увлеченность игрока. Например, если меч в игре может наносить объекту 3 единицы урона, а объект имеет всего 3 HP (hit points — величина, обозначающая максимальный урон), то его можно уничтожить с первого раза, и играть будет слишком легко. Если объект имеет 30 HP, то игроку придется нанести 10 ударов, чтобы его уничтожить. Такое уже подходит скорее для босса, например на первом или втором уровне. Разработчику важно грамотно распределить эти величины, чтобы игра была увлекательной и бросала игроку вызовы.

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

  • Ассет (Asset)— готовый компонент, который можно использовать для создания своих проектов. Это могут быть элемент интерфейса в игре, текстура, фигурка персонажа, шрифт или звук. Приобрести ассеты или скачать бесплатно некоторые из них можно на Unity Asset Store.
  • Игровой объект (GameObject)— это любой ассет, который используется в игровой сцене. Например, изображение монетки, сам ее внешний вид — это ассет, а пять монет, которые должен подобрать персонаж в процессе прохождения уровня — это пять игровых объектов. Сам персонаж при этом тоже станет игровым объектом.
  • Компоненты (Components) — часть игрового объекта, отвечающая за его поведение в процессе игры: перемещение или реакцию на определенные триггеры.
  • Скрипт (Script)— код на C#, в котором прописаны конкретные условия работы компонента.

Установка Unity занимает 5–10 минут. Для этого нужно зайти на официальный сайт проекта и выбрать бесплатный тариф для физических лиц — Personal. Его будет достаточно для самостоятельного изучения Unity и создания первой игры. Еще один бесплатный тариф — студенческий, но он подойдет тем, кто зарегистрирован на GitHub и может подтвердить свой ученический статус.

После нажатия кнопки «Начать» откроется Unity Store. Для новых пользователей в нем есть вариант установки движка с обучающим руководством для начинающих. С помощью кнопки «Начните здесь» скачивается установщик UnityHubSetup.exe, который запускается как любой другой установщик: нужно просто открыть файл, принять условия пользовательского соглашения и нажать кнопку «Установить».

Русского языка в настройках нет, так что придется совершенствовать технический английский. Всего Unity занимает 11,3 Гб,поэтому перед установкой лучше проверить свободное место на диске и почистить его при необходимости.

Следующий шаг — создание Unity ID. Можно регистрироваться с помощью почты или использовать предложенные аккаунты, например Google или Apple. Важно поставить первые две галочки: согласие с условиями использования Unity и признание политики конфиденциальности. Третья галочка — это согласие на маркетинговые рассылки, ее ставить не обязательно.

После регистрации Unity предложит создать тестовый проект Microgame. На выбор предлагается пять шаблонов:

  • LEGO Microgame;
  • шутер от первого лица;
  • картинг;
  • платформер;
  • пустой 3D-шаблон.

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

Создание проекта

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

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

Настройка интерфейса

В стандартном интерфейсе проекта шесть элементов рабочей области:

  1. Верхняя панель инструментов— в ней находятся стандартные вкладки File, Edit, Help, как во многих других интерфейсах, а также вкладки Assets, GameObject, Components и Window.
  2. Scene — окно сцены, в котором выстраивается игровое пространство (элементы игрового мира, текстуры, фигурки персонажей и прочее).
  3. Games — это окно игры, в котором можно посмотреть глазами пользователя, как будут двигаться элементы и работать игровые механики.
  4. Hierarchy — окно иерархии, в нем перечислен список всех элементов (GameObject), которые помещены в окно Scene.
  5. Project — это система папок, в которых хранятся ассеты по категориям (текстуры, шрифты, звуки и т.д.).
  6. Inspector — окно для изменения элементов игры, их размера, цвета, положения в пространстве и других характеристик.

Добавление объекта

Объекты на экран Scene можно добавить из Asset Store. Для этого на панели инструментов нужно кликнуть на вкладку Window –> General –> Asset Store.

В строке поиска можно по названиям найти нужные компоненты, например, сет Free Platform Game Assets.

Как и другие ассеты, он загружается с помощью кнопки Import.

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

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

Шаг 2. Перенести в область Scene

Работа со скриптами

За поведение игровых объектов отвечают присоединенные к ним компоненты (Components). Базовый компонент любого объекта — Transform, он отвечает за положение элемента в окне Scene, возможность поворачивать и масштабировать его. К базовому компоненту можно добавить, например, Renderer, который меняет цвет, или RigidBody, который отвечает за массу и физику объекта. Но кроме базовых компонентов, объектам можно задавать особые условия, и для этого как раз используются скрипты.

Создать новый скрипт можно в окне Project, кликнув мышкой на Assets –> Create –> C# Script.

Двойным кликом мыши скрипт открывается в текстовом редакторе. Скрипты, как и все остальное в Unity, прописываются на С#, так что для создания сложных проектов разработчикам все же придется освоить этот язык программирования.

Базовые элементы скриптов — это:

  • using — элемент в коде, который подключает библиотеки;
  • public class — в этой строке обычно прописан класс MonoBehaviour, он содержит набор функций, необходимых для работы скрипта;
  • void — те самые функции, с их помощью прописываются действия, происходящие в игре.

Рассмотрим, например, функцию start. Любое действие в ней произойдет только один раз, когда запустится игра. Пропишем здесь print (“Hi”).

И можно заметить, что в консоли это слово выводится один раз.

Функция update — повторяющаяся, ее можно использовать, например, для передвижения объекта. Для этого в скрипте задается переменная int i = 0, она выводится на экран с помощью функции print (i) и увеличивается на одну единицу за каждый шаг с помощью i++.

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

Настройка триггеров

Для понимания сути триггеров важно усвоить, что такое коллайдер (Collider). Это компонент, который присваивается объекту в пространстве игры, задает форму и делает его твердым, недоступным для прохождения сквозь него. Например, если мы разместим монетку в 2D-пространстве и захотим сделать так, чтобы она упала на платформу, то без использования компонента Collider ничего не получится — монетка пролетит сквозь платформу.

Поэтому обоим объектам необходимо присвоить компонент Box Collider 2D — это тонкая зеленая линия, которая обводит элементы по контуру, и за счет этой рамки они становятся твердыми, то есть один не может пройти сквозь другой.

Так объекты обязательно соприкоснутся и монета встанет на платформу.

Триггер (Trigger) — это пространство на карте, при попадании объекта в которое происходит действие; он тоже обводит объект или область в пространстве по краям. По сути, это тот же коллайдер, только триггер позволяет объектам проходить внутрь этой области. Представьте, что на ту же самую платформу вместе с коллайдером наброшен триггер, и при попадании персонажа внутрь триггерной области активируется телепорт — персонажа перебрасывает в другую точку карты.

Чтобы создать триггер, нужно накинуть тот же самый компонент коллайдера, но поставить галочку Is Trigger.

Триггеры распознают три варианта взаимодействия области на карте и объекта:

  • OnTriggerEnter — объект зашел в зону;
  • OnTriggerStay — объект находится в зоне;
  • OnTriggerExit — объект покинул зону.
Читайте также:  Расстояние зданий при строительстве

Что дальше?

Освоить интерфейс Unity довольно легко, в интернете есть разные гайды на тему того, как сделать это действительно быстро. Например, видео «Я сделал игру на Unity за неделю» или обучающий мини-курс «Как создать RPG за час». Можно изучать геймдев самостоятельно или начать обучение на курсе — это ускорит процесс и даст более заметные результаты.

Для работы со скриптами и создания более сложных механик разработчикам в любом случае понадобится С#, так что к его изучению вы тоже рано или поздно придете. Но в отличие от Unity, по C# нет в свободном доступе такого большого количества актуальных и понятных гайдов, так что в целях экономии времени и сил лучше записаться на курс «Разработчик игр на Unity», где все знания упакованы в структурированные блоки и сбалансированы с практикой на тренажерах.

Источник: blog.skillfactory.ru

2D игра на Unity. Подробное руководство. Часть 1

Начнем с самого простого: загрузки и настройки Unity.

Загрузите последнюю версию с официального сайта или торрента и запустите установочный файл.

Для редактирования кода в Unity (4.0.1 и выше) служит редактор MonoDevelop. Если вы работаете в Windows, вы можете (и я вам советую) использовать альтернативый редактор Visual Studio 2013 Desktop (C#) для Windows, после чего в настройках Unity измените редактор по умолчанию на Visual Studio.

Выбор редактора в Unity

Полезно знать: невозможно использовать отладчик Visual Studio 2013 Express с Unity. Вы должны иметь Pro версию Visual Studio и купить UnityVS плагин. С версией Express, вы будете иметь лучший редактор кода, но отсутствие отладчика сведет на нет все его достоинства.

Mac OS X

MonoDevelop 4 — существенно лучше, чем старый MonoDevelop 2 в предыдущих версиях Unity. Он, конечно, далек от совершенства, но ничего лучшего под на Mac не придумано.

На каком языке программировать в Unity?

Unity позволяет кодировать на трех языках: JavaScript, C# и Boo. Рекомендую использовать C# — он более мощный и проще.

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

Вот несколько ссылок, которые могут быть вам полезными:

  • Изучение интерфейса Unitys : основа всех основ. Не зная интерфейса, вы не сможете создавать игры в Unity 3D
  • Создание сцены в Unity : изучение этого раздела поможет вам создать свою собственную сцену
Первая сцена. Создаем новый проект.

Выберите меню File , а затем создаqnt новый проект. Не выбирайте нивакой стандартный пакет на первое время. Вы можете повторно импортировать их позже, если вы захотите, просто поначалу они будут просто сбивать вас с толку.

Создание нового проекта в Unity

Выберите 2D настройки. Как и прежде, вы можете изменить этот флаг в настройках проекта позже.

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

Разметка и панели Unity

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

Пустой проект

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

Чтобы держать все под рукой, советуем создать папки во вкладке Project (Проект). Эти папки будут созданы в папке Assets вашего проекта.

Папки в Unity

Внимание: папка Assets – это место, где хранится все, что вы добавляете во вкладке Project. Она может быть невидимой в Unity, в зависимости от выбранной разметки вкладки (одна или две колонки), но вы сможете увидеть ее, открыв приложение для экспорта файлов.

Вот пример структуры, которую мы используем в наших проектах. Вы можете адаптировать ее под свои предпочтения.

Ассеты проекта

В вашей панели Project, вы можете найти различные типы ассетов:

Префабы

Многоразовые игровые объекты (например: пули, враги, бонусы).

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

Сцены

Сцена содержит игровой уровень или меню.

В отличие от других объектов, создаваемых в панели «Проект», сцены создаются в меню «Файл». Если вы хотите создать сцену, нажмите на кнопку «Новая сцена» в подменю и не забудьте потом сохранить ее в папку Scenes.

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

Звуки

Тут все предельно просто. Увидите, если захотите раскидать музыку по разным папкам.

Scripts

Весь код находится здесь. Мы используем эту папку в качестве эквивалента корневой папке в C# проекте.

Textures

Спрайты и изображения вашей игры. В 2D проекте вы можете переименовать эту папку в «Sprites».

Это неважно для 2D проекта, но, оставив название Textures (Текстуры), вы дадите возможность Unity автоматизировать некоторые задачи. Если вы хотите узнать подробную информацию по этой теме, вы можете прочитать об этом здесь , или здесь .

Заметка о папке Resources : если вы уже работали с Unity, вы знает, что Resources – полезная и уникальная папка. Она позволяет загрузить в скрипт объект или файл (с помощью статичного класса Resources ). Она понадобится нам в самом конце (в главе, посвященной меню). Проще говоря, пока мы не будем ее добавлять.

Наша первая игровая сцена

Панель Hierarchy (Иерархия) содержит все объекты, которые доступны в сцене. Это то, чем вы манипулируете, когда начинаете игру с помощью кнопки «Play».

Каждый объект сцены является игровым объектом для Unity. Вы можете создать объект в главной сцене, или в другом объекте игры. Также вы можете в любое время переместить объект чтобы изменить его родителя.

Логические объекты

Как вы можете видеть здесь, у нас здесь 3 потомка для объекта Level .

Пустые объекты

В Unity можно создать пустой объект и использовать его в качестве «папки» для других игровых объектов. Это упростит структуру вашей сцены.

Пустые объекты

Убедитесь, что все они имеют координаты (0, 0, 0) и тогда вы сможете легко их найти! Пустые объекты никак не используют свои координаты, но они влияют на относительные координаты их потомков. Мы не будем говорить об этой теме в этом уроке, давайте просто обнулим координаты ныших пустых объектов.

Заполнение сцены

По умолчанию, новая сцена создается с объектом Main Camera (Главная камера). Перетащите ее на сцену.

Для начала создайте эти пустые объекты:

Scripts Мы добавим наши скрипты сюда. Мы используем этот объект, чтобы прикрепить сценарии, которые не связаны с объектом – например, скрипт гейм-менеджера. Render Здесь будет наша камера и источники света. Level

В Level создайте 3 пустых объекта:

  • 0 — Background
  • 1 — Middleground
  • 2 — Foreground

Сохраните сцену в папке Scenes . Назовите ее как угодно, например Stage1 . Вот, что у нас получилось:

Первая сцена на Unity

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

Если же она является корневым объектом сцены или находится внутри пустого игрового объекта, она всегда показывает один и тот же вид. Однако если вы поместите камеру в движущийся игровой объект, она будет следовать за его передвижениями в пределах сцены. В данном случае нам нужна фиксированная камера, поэтому мы помещаем ее в пустой объект Render . Но запомните это свойство объекта камеры, оно может вам пригодиться. Мы подробно остановимся на этой теме в главе «Паралаксный скроллинг».

Мы только что создали базовую структуру нашей игры. На следующем этапе мы начнем делать забавные вещи: добавим на сцену фон и кое-что еще!

Добавляем фон в сцену

Наш первый фон будет статическим. Воспользуемся следующим изображением:

TGPA фон

Импортируйте изображение в папку Textures (Текстуры). Просто скопируйте файл в нее, или перетащите его из проводника. Не беспокойтесь сейчас о настройках импорта.

Создайте в Unity новый игровой объект Sprite на сцене.

Новый спрайт для игры в Unity

Что такое спрайт?

По сути, спрайт – это 2D-изображение, используемое в видео-игре. В данном случае это объект Unity для создания 2D-игр.

Добавляем текстуру спрайта

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

Выбор спрайта в Unity

Вы должны нажать на маленький круглый значок справа от поля ввода, чтобы появилось Select Sprite (Выбрать спрайт) в Инспекторе

Мой спрайт не появляется в диалоговом окне! Убедитесь, что вы находитесь в вкдадке Assets диалогового окна «Select Sprite» (Выбрать спрайт). Если вы видите диалоговое окно пустым, — не пугайтечсь. Дело в том, что для некоторых установок Unity, даже со свежим новым 2D проектом изображения импортируются как «Текстура», а не «Спрайт». Чтобы это исправить, необходимо выбрать изображение на панели «Проект», и в «Инспекторе», изменить свойство «Текстура Type» имущество «Sprite»:

Вид спрайта

Итак, мы создали простой спрайт отображающий облака на небе. Давайте внесем изменения в сцену. В панели Hierarchy (Иерархия) выберите New Sprite . Переименуйте его в Background1 или что-то такое, что легко запомнить. Переименуйте его в Background1 или что-то такое, что легко запомнить. Затем переместите объект в нужное место: Level -> 0 — Background . Измените координаты на (0, 0, 0) .

Фон установлен

Создайте копию фона и поместите его в (20, 0, 0) . Это должно отлично подойти к первой части.

Фон 2

Слои со спрайтами

Следующее утверждение очевидно, но обладает некими неудобствами: мы отображения 2D мир. Это означает, что все изображения на одной и той же глубине, то есть 0 . И вы графический движок не знает, что отображать в первую очередь. Слои спрайтов позволяют нам обозначить, что находится спереди, а что сзади.

В Unity мы можем изменить «Z» наших элементов, что позволит нам работать со слоями. Это то, что мы делали в этом руководстве перед обновлением до Unity 5, но нам понравилась идея идея использовать слои со спрайтами. У вашего компонента Sprite Renderer есть поле с именем Sorting Layer с дефолтным значением. Если щелкнуть на нем, то вы увидите:

Сортировка списка слоев

Давайте добавим несколько слоев под наши нужды (используйте кнопку + ):

Добавить сортировку слоя в Unity

Добавьте фоновый слой к вашему спрайту фона:

Установить сортировку слоя

Настройка Order in Layer — это способ ограничить подслои. Спрайты с меньшим номером оказываются перед спрайтами с большими числами.

Слой Default нельзя удалить, так как это слой, используемый 3D-элементами. Вы можете иметь 3D-объекты в 2D игре, в частности, частицы рассматриваются как 3D-объекты Unity, так что они будут рендериться на этом слое.

Добавление элементов фона

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

Спрайты для платформ

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

Получение двух спрайтов из одного изображения

Выполняйте следующие действия:

  1. Импортируйте изображения в папку «Текстуры»
  2. Выберите спрайт Platform и перейдите к панели Инспектор
  3. Измените «Sprite Mode» на «Multiple»
  4. Нажмите на кнопку Sprite Editor (Редактор спрайта)

В новом окне ( Sprite Editor ) вы можете рисовать прямоугольники вокруг каждой платформы, чтобы разрезать текстуру на более мелкие части:

Редактор спрайтов

Кнопка Slice в левом верхнем углу позволит вам быстро и автоматически проделать эту утомительную работу:

Автоматическая нарезка

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

В этом уроке проделаем эту операцию вручную. Назовите платформы platform1 и platform2 . Теперь, под файлом изображения, вы должны увидеть два спрайта отдельно:

Результат редактора спрайтов

Добавим их в сцену. Для этого мы будем выполнять те же действия что и для фона: создадим новый спрайт и выберим platform1 . Потом повторим эти действия для platform2 . Поместите их в объект 1 — Middleground . Убедитесь, что их позиция по оси Z равна нулю.

Две новые платформы

Prefabs (Префабы)

Сохранить эти платформы как префабы. Просто перетащите их в папку Prefabs :

Префабы

Таким образом вы создадите Prefab , точно отвечающий оригинальному игровому объекту. Вы увидите, что игровой объект, который вы конвертировали в Prefab , представляет собой новый ряд кнопок прямо под его именем:

соединение префабов

Заметка о кнопках «Prefab»: При последующей модификации игрового объекта, вы можете использовать кнопку «Apply», чтобы применить эти изменения к Prefab , или кнопку «Revert», чтобы отменить все изменения игрового объекта в свойстваъ Prefab . Кнопка «Select» переместит выбранные свойства в ассет Prefab в окне проекта (они будут выделены).

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

Теперь вы можете добавить больше платформ, меняющих свои координаты, размеры и плоскости (вы можете поместить их на заднем или переднем плане, просто установите координату Z для платформы на 0 ).

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

Прежде чем двигаться дальше, мы модифицируем наши слои, чтобы избежать каких-либо проблем с порядком их отображения. Для этого просто измените позицию игровых объектов по оси Z во вкладке Hierarchy (Иерархия) следующим образом:

Слой Позиционирование по оси Z
0 — Задний фон 10
1 — Средний фон 5
2 — передний фон 0

При переключении из 2D режима в 3D, в окне «Scene» (Сцена) вы будете четко видеть слои:

Кликнув на игровом объекте Main Camera , вы увидите, что флажок Projection установлен на Orthographic . Эта настройка позволяет камере визуализировать 2D игру без учета трехмерных свойств объектов. Имейте в виду, что даже если вы работаете с 2D объектами, Unity по-прежнему использует свой 3D движок для визуализации сцены. Рисунок выше это наглядно демонстрирует.

В следующем уроке:

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

Источник: websketches.ru

Рейтинг
Загрузка ...