tonykot

tonykot

Пикабушник
поставил 4013 плюсов и 439 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабуболее 1000 подписчиков
2638 рейтинг 948 подписчиков 18 подписок 17 постов 7 в горячем

Разработка 2D игры на Unity (4/5) "Игровая логика"

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Привет, пикабу! По итогам вчерашнего поста на меня подписались ещё 52 человека. Спасибо вам, друзья, что проявили интерес. Буду стараться не разочаровать. Поэтому сегодня я снова не лёг спать, а сел пилить для вас очередной пост =)

Внимание! Очень-очень длиннопост!


Хронология постов:

1 - Знакомство с редактором.

2 - Подготовка сцены.

3 - Основы скриптинга в Unity.

И по вашей просьбе - ссылка на ассеты (гуглодиск). Там все исходники, кроме скриптов.


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

А начнём мы с перемещения персонажа. Для начала, давайте договоримся, что в управлении будут принимать участие четыре клавиши. Левый шифт, правый шифт, левый контрол и правый контрол. Чуть позже мы задействуем пробел, но я вам этого не говорил =)

Теперь запустим Unity и снова откроем для редактирования наш скрипт Game.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

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

За перехват событий ввода, в Unity, отвечает класс Input. Поэтому - пишем условие, в свойствах которого укажем, когда игрок нажимает на кнопку Left Shift, нам необходимо...


Тут сразу оговорюсь. Мы можем перехватывать аж три события ввода. Игрок нажал клавишу (GetKeyDown) - вернёт true в тот момент, когда клавиша будет нажата. Игрок отпустил клавишу (GetKeyUp) - вернёт true в тот момент, когда клавиша будет отпущена. И состояние клавиши (GetKey) - будет возвращать true, пока клавиша нажата и false, если игрок эту клавишу не трогает. В нашем случае производится однократное действие и было бы удобнее, если бы оно производилось именно по нажатию на кнопку.


Итак. Свойства условия (строка 91) мы заполнили. Давайте перейдём к его телу. Давайте рассуждать логически. Во первых нам необходимо сообщить скрипту, какое положение сейчас занимает игрок. Хорошо, присвоим переменной playerPos единицу. Далее нам необходимо включить спрайт, соответствующий данному положению. Ставим флаг активности объекта player1 в состояние true. А оставшиеся спрайты нам необходимо отключить. Вдруг, до этого мы занимали другое положение. Деактивируем объекты player2, player3 и player4.


Строки с 90 по 99 - заполнены. Все остальные положения мы меняем по тому же принципу. Не забывая менять названия клавиш и вспоминать, где какой объект расположен.


С перемещением персонажа разобрались. Пришло время научить вас плохому слову. А слово это - КОРУТИН. На хабре видел спор, что это девочка (женский род). Но я, со своим знанием английского на уровне пятого класса, слово Corutine читаю как корутин. Можете меня побить.

Так что же такое корутины? Корутинами называют сопрограммы. То есть функции, которые выполняются параллельно основному потоку и позволяют делать временные задержки, не прерываясь и не мешая выполнению функции Update. А теперь я вас окончательно запутаю и скажу, что выполняются они всё таки НЕ параллельно, но вы это можете забыть, так как пишу я это для знатоков, которые уже приготовились плеваться в комментариях. Если интересно, как работают сопрограммы - гуглите. Нас интересует только одно её свойство. Задержка.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

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


Обратите внимание, для того, чтобы корректно создать корутин, необходимо выполнить два условия: первое - функция должна начинаться с надписи IEnumerator (129 строка). Второе - функция должна возвращать yield (144 строка).


Давайте создадим корутин с названием Timer. Он, через равные промежутки времени, будет создавать на сцене новый игровой объект. Делается это функцией Instantiate. А образом и подобием ему станет объект, закреплённый за переменной zero. Дадим имя egg создаваемому объекту, чтобы было удобно с ним работать далее (131 строка).

Далее, нам необходимо повесить на него скрипт Egg, так как он будет отвечать за созданную сущность. Каждый прикреплённый к объекту скрипт называется компонентом. Поэтому создаём переменную comp и указываем, что она будет создавать компонент Egg на объекте, хранящемся в переменной egg (133 строка).

Теперь, в созданный нами компонент, необходимо передать несколько параметров. Для начала - присвоим ссылку на текущий скрипт (Game) в переменную comp.game (135 строка). Далее, нам необходимо определить, в каком месте появится яйцо. В этом нам поможет рандом. Запишем в переменную comp.spawn рандомное значение от 1 ДО 5 (137 строка). Пять не включается. Ну и, в зависимости от того, какой нам выпал спавн - записываем соответствующий массив яиц в переменную comp.egg (строки 139 - 142).


Вся логика корутина готова. Теперь нам необходимо задать паузу. Чтобы это сделать, нам необходимо вернуть yield с функцией WaitForSeconds, в свойствах которой указать время задержки. В нашем случае - это переменная time (144 строка). Как понятно из названия, эта функция ожидает, в течение указанного в свойствах времени (в секундах). После чего продолжает выполнение корутина. Но нам, после паузы, необходимо повторить все те же действия, поэтому мы просто перезапускаем корутин. Запуск корутина осуществляется функцией StartCoroutine, с указанием корутина в её свойствах (146 строка).


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

Лучший отдых - это смена вида деятельности =) Поэтому переходим в редактор Unity и импортируем загруженный пак в проект. Делается это в меню Assets -> Import Package -> Custom Package. Выглядит это вот так:

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Возможно, вам не нужны все исходники, которыми я с вами делюсь. В открывшемся окне можете просто снять галочки с тех, что вам не нужны. Далее нажимаем Import и все файлы появятся в вашем окне Project. Нас интересует папка Sounds и шрифт Electron.


Возвращаемся к редактированию скрипта Game и добавим ещё несколько переменных.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Переменная типа TextMesh с именем counter - будет хранить счётчик пойманных яиц.

Три переменные типа GameObject с именами hp1, hp2 и hp3 - будут хранить иконки "штрафных очков", то есть индикаторы тех яиц, что игрок уронил.


Переменная типа GameObject с именем pressStart будет хранить объект надписи "нажмите такую-то кнопку, чтобы начать".


Три переменные типа AudioSource c именами soundStep, soundCrash и soundCount будут хранить звуковые файлы, которые мы будем воспроизводить каждый "шаг", при разбитии и при поимке яйца, соответственно.


Булевая переменная со странным именем isPlaying будет сообщать нам, воспроизведена ли сейчас игра. По умолчанию присвоим ей значение false.


Готово. Переменные есть, давайте вернёмся в редактор и поместим на сцену новые объекты. Создадим два пустых объекта и назовём их GUI и Sounds.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Перетащим звуки на сцену, сделаем их дочерними объекту Sounds и перетащим звуки в соответствующие переменные скрипта Game на объекте Main Camera.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Теперь графические элементы (GUI от "графический юзер интерфейс").

Идём в папку со спрайтами и ищем картинку разбитого яйца с цыплёнком. Помещаем его на сцену. Трижды. Далее в инспекторе - необходимо выставить их положение.

Теперь давайте создадим два объекта с текстом. Нажимаем правой клавишей мыши, 3D Object -> 3D Text. Один назовём Counter, а другой Press Start. После того, как объекты созданы - перетащите их в соответствующие поля скрипта Game на объекте Main Camera.

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Ну и давайте настроим наши надписи. Начнём со счётчика. Выбираем объект Counter и идём в инспектор. Изменим позицию, чтобы шрифт было чётко видно (отдалив его по оси Z) и разместим надпись в правом верхнем углу экрана. Изменим текст на "0", размер шрифта поставим 50, а сам шрифт перетащим из окна проект. Цвет выберем пипеткой. Готово. 

Разработка 2D игры на Unity (4/5) "Игровая логика" Unity, Gamedev, 2D, Игры, Урок, Длиннопост, Текст, Гифка

Прошу прощения за обрезанную гифку. Сайт просит не больше 800px.

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


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


Спасибо, что прочитали до конца и подписывайтесь, чтобы не пропустить следующий пост ;)

Показать полностью 8

Разработка 2D игры на Unity (3/5) "Основы скриптинга"

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Привет, пикабу! Вижу, данная серия оказалась не очень-то интересна, но наличие подписчиков, коих набралось уже 50 человек, обязывает закончить начатое =)
Прошу прощения за долгое отсутствие... Работа. Приходится писать ночью.

Внимание! Очень длиннопост!


Хронология постов:
Часть 1 - Знакомство с редактором.

Часть 2 - Подготовка сцены.


В этом посте мы поговорим о скриптинге в юнити. Сразу обращу внимание на три момента:
1 - Кодить мы будем на языке C#. Юнити ещё поддерживает JS, но его мы не затронем.
2 - Для знатоков. Мой код не идеален и не является истиной в последней инстанции. Тем более в этой серии. Ибо тут цель познакомить с основами, а не выдать качественную игру.
3 - Код самого приложения я буду выкладывать картинками. По двум причинам: подсветка синтаксиса и ибо нех  чтобы не копипастили. Пишите ручками, лучше запомнится.


Итак. Начнём. Давайте сразу же создадим два скрипта в уже созданной нами папке Scripts.
Для этого жмем правую кнопку мыши и в выпадающем меню выбираем Create -> С# Script.

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Назовём их Game и Egg, так как они будут отвечать за основную логику игры и за объекты яиц, соответственно. Создали? Отлично! Для того, чтобы скрипты заработали, они должны быть помещены на какие либо объекты на сцене. Давайте создадим новый игровой объект и назовём его Zero. Как это делать, я уже писал, но вот анимашка:

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Теперь, поместим скрипт Game на объект MainCamera, а скрипт Egg на объект Zero. Сделать это можно тремя способами: перетащив скрипт на объект в окне иерархии, перетащив скрипт к компонентам объекта в окно инспектора или нажав в инспекторе кнопку Add Component.

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Давайте откроем скрипт Game для редактирования, дважды кликнув по нему левой клавишей мыши. Вот, что мы увидим в редакторе:

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Как видим, Unity создала скрипт не пустым. Она подгрузила в него две стандартные библиотеки (1 и 2 строка), а так же создала публичный класс (4 строка), с тем же названием, что и имя самого скрипта, унаследовав его от базового класса MonoBehavior. Дабы сэкономить длину поста, я не буду рассказывать, зачем нужны библиотеки и базовый класс. Но стоит рассмотреть две стандартные функции, которые также создала нам Unity. 

Функция Start (7 строка) - вызывается единожды, при загрузке скрипта.

Функция Update (12 строка) - вызывается каждый раз перед обновлением кадра.


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


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

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Итак. На седьмой строке у нас расположена переменная типа GameObject с именем zero. Она будет содержать в себе пустой игровой объект со сцены. Который будет подразумевать "сущность" яйца. То есть создавая на сцене дубликат данного объекта, мы будем иметь в виду, что на сцене появилось новое яйцо, управлять которым будет скрипт Egg. Фактически эта переменная нам не нужна и мы могли бы просто создавать новый пустой объект. Но я считаю необходимым показать на примере, как создаётся копия объекта на сцене.


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


С 10 по 13 строку мы храним игровые объекты со спрайтами положений нашего игрока.


На 15 строке мы храним числовое обозначение положения игрока.


Тип переменной int означает integer то есть целое число. Так же Unity понимает все стандартные типы данных из C# (да и остальных языков) - это float, то есть числа с плавающей запятой, string, то есть строковая переменная и bool - булевая переменная, хранящая в себе одно из двух состояний: true или false.


Далее, на 18 строке, мы видим переменную типа Transform с именем egg. Как говорит комментарий - это врЕменная переменная, необходимая только для того, чтобы мы смогли заполнить массивы с объектами наших яиц. И тут есть две интересности:


Во первых - это тип Transform, который хранит в себе информацию из компонента Transform, то есть всё, что касается положения объекта в игровом пространстве. А ещё переменная transform позволяет делать поиск по дочерним объектам. Этим его свойством мы и воспользуемся.


А во вторых, мы видим надпись [HideInInspector] строкой выше. Эта надпись говорит редактору Unity, что переменную, идущую сразу за этой надписью - необходимо скрыть из инспектора. Нужно это для того, чтобы не забивать инспектор ненужными данными и оставить только необходимые настройки.

С 21 по 28 строку, у нас располагаются массивы игровых объектов для каждого из четырёх спавнов, которые мы назвали egg1, egg2, egg3 и egg4, соответственно. Квадратные скобки после объявления типа переменной говорят именно о том, что это будет массив.


Далее расположены переменные time, count и hp (от health points). Для чего они нужны - понятно из комментариев. На этом, объявление переменных окончено.


Давайте присвоим нашим переменным объекты со сцены. Для этого идём в редактор и перетаскиваем объекты из окна иерархии в соответствующие поля в окне инспектора:

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Отлично! Теперь наш скрипт знает, какие объекты отвечают за положение игрока, а также он знает, где расположен наш пустой объект. Но нам необходимо сделать самое главное - указать положения всех яиц на сцене. Но постойте-ка! Их же... 40 о_О И да, во первых их просто лень назначать в ручную. Во вторых - мы, вдруг, можем захотеть заменить какой либо из объектов и потом нам придётся снова назначать его в инспекторе. Давайте автоматизируем этот процесс. Займёмся инициализацией:

Разработка 2D игры на Unity (3/5) "Основы скриптинга" Gamedev, Unity, 2D, Игры, Урок, Длиннопост, Гифка

Для этого переходим к написанию функции Start.
Яйца у нас будут храниться не отдельными объектами, а целыми массивами. Так будет удобнее к ним обращаться. А для удобства заполнения этих массивов, мы создали переменную egg. Она у нас будет соответствовать компоненту трансформ, одного из расположенных на сцене спавнов. Для того, чтобы этот спавн найти, мы используем функцию Find и в скобках указываем имя искомого объекта. Всё это описано в 59-ой строке.


Далее, нам необходимо объявить массив, указав его размер (строка 61).


А после - заполняем массив, используя цикл (строка 63). 

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

В теле цикла мы присваиваем в ячейку массива, соответствующую номеру круга, гейм объект, который мы ищем среди дочерних объектов нашей временной переменной. Поиск выполняется функцией FindChild. И в скобочках нам необходимо указать имя искомого объекта. Имя у нас соответствует номеру круга. А поскольку номер круга у нас - целое число, мы конвертируем его в строку, используя функцию "ToString()".


Первый массив заполнен. Делаем всё то же самое для оставшихся спавнов.


Далее нам необходимо скрыть волка на сцене. Показывать мы его начнём только после запуска игры. Для этого просто отключаем игровой объект на сцене, перемещая флаг в функции SetActive в состояние false. Делаем то же для всех спрайтов волка (стр 81-84).


А также нам необходимо скрыть со сцены все яйца. Тут снова не обойтись без цикла...

Просто перебираем все массивы и отключаем объекты яиц уже известной нам функцией. Сие действие происходит с 87-й по 90-ю строку кода.


На этом я закончу пост. Вы можете запустить игру и убедиться в том, что яйца пропадают со сцены. Внимание!!! Для корректной работы скрипта, яйца в каждом из спавнов должны называться от 0 до 9. Целым числом. Начиная с нуля. Нет, не с единицы.


Спасибо, что дочитали и подписывайтесь, чтобы не пропустить следующие посты! ;)

Показать полностью 7

Разработка 2D игры на Unity (2/5) "Подготовка сцены".

Разработка 2D игры на Unity (2/5) "Подготовка сцены". Unity, Gamedev, Игры, 2D, Урок, Длиннопост

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


Хронология постов:

1 - Знакомство с редактором.


Ну и начнем с того, из чего строится весь проект - ассеты.

Ассеты - это исходники вашего проекта. Все наши исходники, как я говорил в прошлом посте, отображаются в окне "Project" и находятся в папке "Assets", расположенной в корневой директории проекта. Юнити - очень дружелюбный движок и понимает множество форматов файлов. Более того, он их самостоятельно конвертирует в себе понятные форматы, поэтому абсолютно не имеет значения, в каких форматах вы будете хранить свои исходники. Так, например, изображения можно хранить в формате фотошоп, чтобы, в случае чего, их можно было легко подправить. А 3D графику можно хранить в формате .max. Вот только у вас должен быть установлен лицензионный 3D max (ну или хорошо крякнутый, кому как).


Где брать исходники? В голову приходит три варианта. Делать самостоятельно (что предпочтительно), искать в гугле (эффективно, но готовый качественный контент БЕСПЛАТНО получить практически невозможно) и скачать в Unity Asset Store.

Разработка 2D игры на Unity (2/5) "Подготовка сцены". Unity, Gamedev, Игры, 2D, Урок, Длиннопост

Unity Asset Store - это встроенный магазин исходников юнити. Открыть его можно в самом редакторе, комбинацией клавиш Ctrl+9. Здесь вы сможете найти всё, что необходимо для создания практически любой игры. Большинство ассетов - платные. Но они, собственно, и представляют из себя большую ценность, чем бесплатные. Некоторые из них можно найти и бесплатно, на просторах "этих ваших интернетов". Но я вам этого не говорил.


Мы же будем делать всё своими руками. Только импровизация! Только хардкор!

Я взял для примера изображение из интернета (было в первом посте) и сделал на его основе вот такую картинку (рис. ниже). Рисуется всё в фотошопе. Каждый отдельный элемент - новый слой. Я тот ещё мастер фотошопа... Но если хотите лучше - можете нарисовать.

Разработка 2D игры на Unity (2/5) "Подготовка сцены". Unity, Gamedev, Игры, 2D, Урок, Длиннопост

Для удобства, давайте создадим структуру нашего проекта, чтобы потом было удобнее ориентироваться во всех наших файлах. Сделаем три папки: Scripts, Sounds и Sprites. Все наши картинки сохраняем по одной в папку Sprites, попутно сортируя их на под категории Eggs и Player. И, для разметки, сохраним картинку целиком. Вот, что получилось у меня в итоге:

Разработка 2D игры на Unity (2/5) "Подготовка сцены". Unity, Gamedev, Игры, 2D, Урок, Длиннопост

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

Берём изображение "Sprites" и перетаскиваем его в окно иерархии (Hierarchy). Так оно займёт положение в самом центре сцены. Теперь, давайте создадим несколько пустых объектов. Так называемые "пустышки". Кликаем правой кнопкой мыши в окне иерархии и выбираем "Create Empty". Создастся объект, который так же имеет свои координаты, но он ничего в себе не содержит. Зачем он нужен? Для создания иерархии объектов (сортировки, проще говоря). Не просто так же юнитеки назвали так своё окно? =) Назовём эти объекты Player, Spawn1, Spawn2, Spawn3 и Spawn 4. Логично будет предположить, что в этих объектах будут размещаться яйца для каждой из 4-х сторон. Да, так оно и есть.


Берём яйца в окне проект и перетаскиваем их в окно сцены (Scene), размещая их сразу на свои места. Сначала размещаем все яйца (включая разбитое и убегающих цеплят), затем выделяем их все в окне иерархии и делаем дочерними объекту Spawn1. То же самое делаем для остальных спавнов. Да, разбитые яйца нужно будет тоже добавлять заного, для каждой стороны. В конечном итоге должно получиться что-то вроде этого:

Разработка 2D игры на Unity (2/5) "Подготовка сцены". Unity, Gamedev, Игры, 2D, Урок, Длиннопост

Обратите внимание, что у меня активно окно "Game", вместо сцены. То есть вот так вот будет видеть нашу игру - игрок. "Но что это за убожество??!???!!!" - скажете вы, и будете правы. Давайте исправлять. Активируем объект Main Camera. Справа, в окне "Inspector", ищем свойство "Background". Кликаем по нему, а затем, появившейся пипеткой, кликаем по серому фону. Отлично! Фон выровнялся. Но "край" нашей игры заметно отступает от края экрана. Это тоже легко исправить. Ищем свойство "Projection" и выбираем там "Perspective". И теперь, изменяя положение наших объектов по оси Z (делается это в свойствах объекта. Для этого выбираем объект и идём в инспектор), подстраиваем сцену так, чтобы она выглядела красиво.

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


Спасибо, что дочитали до конца! Подписывайтесь, чтобы не пропустить следующий урок ;)

Показать полностью 4

Разработка 2D игры на Unity (1/5) "Знакомство с редактором"

Привет, пикабу! Сим постом, начну небольшую серию "уроков" по созданию двухмерной игры на движке Unity. Надеюсь, кому-то будет интересно. И сразу скажу, что в первом уроке мы не будем кодить. Это вводный урок. Поехали!

А создавать мы, собственно, будем упрощённую копию игры "Электроника". Это та самая советская игра, в которой волк из мультфильма "Ну погоди" ловит яйца.

Разработка 2D игры на Unity (1/5) "Знакомство с редактором" Unity, Gamedev, Программирование, 2D, Игры, Урок, Длиннопост

Для начала, давайте рассмотрим инструментарий, который нам понадобится:

1 - Игровой движок Unity. Это два в одном. И движок и визуальный редактор.
Скачать Unity можно бесплатно, на официальном сайте unity3d.com.
2 - Любой редактор растровой графики, поддерживающий альфа каналы. То есть позволяющий создавать прозрачное изображение. В моём случае это Photoshop.
3 - Визуальная среда разработки, поддерживающая язык C#. По факту, можно кодить и в блокноте. Но визуальный редактор сильно ускоряет процесс. Так, как он имеет подсветку синтаксиса, подсказки, а возможно даже и проверку валидности написанного нами кода. Я пользуюсь Visual Studio. По умолчанию с юнити поставляется Mono Develop.

Всё скачали? Поставили? Отлично!

Давайте посмотрим, чем нам ещё может быть полезен сайт unity3d.com.

Разработка 2D игры на Unity (1/5) "Знакомство с редактором" Unity, Gamedev, Программирование, 2D, Игры, Урок, Длиннопост

1 - Обучающие материалы (unity3d.com/ru/learn/tutorials).
В этом разделе вы можете найти множество видео-уроков с примерами кода, разделённые на различные категории. Полностью изучив этот раздел, вы уже сможете создать что нибудь интересная. Но есть и минус - большинство материалов на английском.
2 - Руководство по движку (http://docs.unity3d.com/ru/current/Manual/).
Практически полностью русифицированный раздел, в котором можно найти ответы на большинство возникающих вопросов. И не только у новичков. Но кому я это рассказываю? Настоящие кулхацкеры и гамедевелоперы не читают документацию =)
3 - API скриптов (http://docs.unity3d.com/ru/current/ScriptReference/).
А вот этот раздел я всё таки советую добавить в закладки. Когда вы поймёте основы скриптинга в Unity и поймёте, по какому принципу можно обращаться к объектам и свойствам, вам можно будет не мучать гугл глупыми вопросами, а сразу идти и курить мануалы на оф. сайте. Так будет проще, ибо гугл не содержит ответов на действительно серьёзные вопросы.

С этим разобрались... Давайте запустим редактор.

Разработка 2D игры на Unity (1/5) "Знакомство с редактором" Unity, Gamedev, Программирование, 2D, Игры, Урок, Длиннопост

Для начала, давайте узнаем, с чем нам придётся работать. На картинке выше - окно редактора Unity, пятой версии. Прошу заметить, что стандартный вид данного окна - отличается от того, что вы видите у меня. Просто потому, что мне так удобнее. Для удобства повествования я выделил в редакторе пять областей. И стрелочкой указал на ещё одно важное место. Давайте посмотрим, что есть что:

1 - Окно иерархии (hierarchy). В этом окне будут размещаться все те элементы, которые вы поместите на сцену. Каждый из этих элементов будет являться 3D объектом и иметь свое положение в пространстве вашей игры.
2 - Окно сцены (scene) и окно игры (game). Именно тут вы сможете рассмотреть создаваемое вами игровое пространство. Отличаются они тем, что по окну сцены вы можете свободно перемещаться и изменять вид (с этим сильно помогут стрелочки, что находятся прямо под моей дойкой). А в окне Game, вы видите игру так, как будет её видеть игрок.
Сейчас в этом окне у меня расположена сцена из стрелялки, сделанная в сеттинге "Марио". Я снимаю видео-уроки по её созданию. Да, квадратно, да не красиво. Это обучающий материал)

3 - Окно проекта (project). Тут будут располагаться все исходники нашего проекта. Это окно, по своему содержанию, полностью соответствует папке "Assets", в корневой директории вашего проекта. А это значит, что все новые файлы вы можете добавлять и туда, и туда.

4 - Инспектор (inspector). В этом окне отображаются все свойства выбранного элемента.
5 - Консоль (console). В этом окне будут отображаться все ошибки, а так же лог, если мы вдруг будем что-то в коде дебажить. Теоретически - это окно можно не держать открытым постоянно. Но я программист, поэтому этим окошком пользуюсь всегда.
Там же, во вкладках, у меня расположены окна анимаций (animator и animation). В этих окошках мы будем анимировать объекты. Но в этой серии уроков анимации мы не коснёмся.

6 - Кнопки воспроизведения проекта. Ражимаем "Play" и можем прямо в окошке "Game" поиграть в нашу игру.


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

Показать полностью 3

Дорогие мои подписчики! Небольшой опрос.

Огромное вам спасибо, что всё ещё остаётесь со мной. Но... Никак у меня нет времени заниматься разработкой GTA... Ребята сейчас активно экспортируют карту (переносят мир Вайс Сити в движок юнити), а я... У меня не хватает времени, чтобы разобраться с анимированием персонажа =(


На данный момент я занят съёмкой видео-уроков по разработке компьютерных игр. Поступил такой заказ от одного малоизвестного сайта (ну и ещё одним ребятам помогаю с написанием сервака для игрушки ВКонтактике, что занимает ещё и свободное время) =) И поскольку я не могу пока что постить ход разработки, у меня к вам вопрос:

Интересны ли вам такие темы, как разработка компьютерных игр на юнити в целом? Или, возможно, кому-то интересно, как снимаются и монтируются видео? И если да, какой формат вам будет интереснее? Длиннопост или видео?) Всем заранее спасибо за ответы!

Пришел кот...

... просил сменить плей лист.
Пришел кот... ... просил сменить плей лист.

Мы сделаем свою GTA c блекджеком и... [длиннопост]

Мы сделаем свою GTA c блекджеком и... [длиннопост]
Показать полностью 1

Мы сделаем свою GTA c блекджеком и...

... и прочими развлечениями =)
Привет, друзья пикабушники! Шутки - шутками, а я к вам сегодня по серьёзному вопросу. Дело в том, что я любитель серии игр GTA, а по профессии - программист. И чуть больше года назад мы с коллегой решили попробовать свои силы в разработке собственной GTA-подобной, а главное - мультиплеерной игрушки.

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

Итак... Предыстория: пять лет назад я был ужасно увлечён актуальной на тот момент GTA San Andreas. А именно - сетевой её версией SA:MP. Большую часть времени я отдавал игре, и однажды попал на сервер созданный командой отличных взрослых (что для данного направления было редкостью) ребят. Это место мне полюбилось какой-то дружелюбностью его обитателей. Через какое-то время я попал в администрацию и стал, тогда ещё не умелой рукой, писать свои первые скрипты... Что в большей мере повлияло на выбор профессии в дальнейшем =) Более того, на сервере я познакомился с прекрасной девушкой. Сам не могу поверить до сих пор, что всё так случилось =) И не смотря на разницу в расстоянии (1 000 километров) мы встречаемся уже четыре года, год из которых она ждала меня из армии, а последние два мы живем вместе. А руководитель этого проекта - мой хороший товарищ. Не смотря на разницу в возрасте более 10 лет и ещё большее расстояние. С ним-то мы всю эту движуху и затеяли...

Зачем нам это? Мы любим игры. Особенно GTA. Со временем старушка SA потеряла свою актуальность и проект медленно потух. Но мы уверены, что мы до сих пор не одиноки в своей страсти и хотим снова начать радовать игроков!
Почему именно СВОЯ игра? Мы уже более трёх лет ищем альтернативную игру. За это время мы потеряли ВСЕХ оставшихся игроков. Пришло время брать инициативу в свои руки.
Какова идея? Мы оба реалисты и скептики. Поэтому GTAV-подобную игру с полностью своим миром (тем более в 4 руки) делать не планируем. Было принято решение написать демонстрационную версию будущей игры в мире GTA VC. Ибо это уже достаточно большая карта, чтобы можно было поработать над производительностью. Но не слишком большая, чтобы можно было реализовать это дело вдвоём. Если получится это - будем создавать свой мир.
Что уже есть? Фактически - ничего. Мы научились таскать ресурсы из оригинальных игр серии. Я начал разработку своего контроллера... И понял, что работы слишком много для двоих.

ПОЭТОМУ! Друзья! Все, у кого есть интерес принять участие в совместной разработке отечественной НЕ коммерческой GTA - пишите на контакты указанные в комментариях. Буду рад пообщаться со всеми, кто умеет работать с:
- 3D графикой и анимацией,
- 2D графикой (заменяем текстуры на более качественные),
- Аудио (начиная с поиска и нарезки звуков окружения, до озвучки персонажей).
Очень нужны программисты. Проект пишется на C#. Очень рад буду людям, уже умеющим работать с движком Unity3D и безумно рад буду хотя бы иметь возможность общаться с теми, кто имеет отношение к разработке экшенов от третьего лица. Очень много вопросов, литература пока что даёт очень скудную информацию по этой тематике. И вообще, рад всем-всем, кто готов помочь хоть чем-то, в меру своих возможностей. Очень много тривиальных задач, на которые тоже нужно тратить время.

Спасибо за внимание! Буду рад пообщаться с вами.
Всем добра!
Показать полностью
Отличная работа, все прочитано!