close

Рабочая программа «Разработка компьютерных игр на движке Godot Engine» Знакомство с Godot Engine и Проект «Pong». Часть 1-3
Рабочая программа «Разработка компьютерных игр на движке Godot Engine»
Знакомство с Godot Engine и Проект «Pong»

 

 




Оглавление разделов

1. Что же такое Godot. Установка программы
2. Знакомство с Godot Engine
3. Разработка игры Pong. Игрок
4. Программирование в Godot
5. Создание уровня
6. Создание противника

 

 


Приветствую вас форумчане, меня зовут Доктор Баг. В реальной жизни я работаю педагогом, провожу дополнительное образования (иными словами провожу кружки). Мое желание открыть кружок по разработки компьютерных игры, к сожалению, RPG Maker программы не подходят для этих целей, так как подобная серия программ заточена под определенный шаблон жанра. Конечно скриптами, плагинами можно изменять сам мейкер, но моя цель научить детей использовать свои знания не нагромождая их лишней информацией.

Мой выбор пал на игровой движок Godot Engine, по нескольким причинам

• Он бесплатный

• У него имеется язык программирования схожий на язык python (нынче я открываю кружок по основам python)

• И у Годота нету проверки лицензии (как у меня было постоянно с Game Maker Studio 2 особенно с моим крутым в кавычках интернета, привет OffSide)

• Он кроссплатформенный

• На нем можно создавать и 3D игры

Мои планы таковы, я желаю развивать GameDev в образовательной сфере. Нынче у меня откроется кружок «Основы программирования Python», а на следующий год планирую открыть еще два кружка «Pixel Art» и «Разработка компьютерных игр на движке Godot». Пока что как таковой рабочей программы по «Разработка компьютерных игр на движке Godot» у меня нету. Но я собираюсь использовать Светлую для заметок, для создание методических рекомендаций, мол напоминания для себя, алгоритм действий что показывать детям. Но чтобы создать подобную программу, придется самому как следует разобраться в годоте. Я нашел способ: я буду изучать различные гайды, от начало до велико, различных авторов. Потому здесь я буду разбирать эти уроки, и открывать новые элементы самого годота. Скажем честно документация Годота желает оставлять лучшего.

Рабочая программа будет разбита на жанры игр. Первый жанр игр, которые попадает под цель это аркады: «Понг», «Арконоид», «Астероид», «Космические гонки», «Битва истребителей». Другие разделы: настольные игры, казуальные игры, головоломки, платформеры, и рпг подобные игры (так как разнообразие рпг жанра слишком большое, будет браться только часть элемента), будут разбираться, когда я дойду до них, возможно буду создавать отдельные странички. Подобную страничку можно использовать и для тех, кто хочет освоить сам годот, только вам еще нужно знать хотя бы основы программирования не обязательно языка годота. Ребята если буду долго не выкладывать информацию, подпинывайте меня, я бывает ленюсь =D

 

 

 

 

 

 

 



Godot Engine (фр. gó-doh) — открытый кроссплатформенный 2D и 3D игровой движок под лицензией MIT, который разрабатывается сообществом Godot Engine Community.

В годот вы можете создавать игры как 2D игры, так и 3D игры. Когда вы создаете игру в годот, вы сможете сразу видеть как будет выглядеть игра. В годот можно перетаскивать элементы прямо на рабочую область и видеть изменения игры. Годот использует собственный язык GDScript который похож на язык python, что облегчает разработку своего проекта.

Годот бесплатный и для скачивание программы вам потребуется перейти по ссылке https://godotengine.org/, в раздел загрузки («Download») и загрузить подходящую версию программы.

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

Вам откроется менеджер проектов:



Здесь вы можете открыть существующий проект, либо создать новый.
Нажимаем кнопку «Новый проект».



Годот запрашивает название проекта и путь к нему. Мы можем выбрать место для нового проекта нажав кнопку «Обзор».



Выбираем нужную папку и нажимаем кнопку «Выбрать эту папку». В моем случаи папка располагается по этому пути



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



Отрисовщик выбираем «OpenGL ES 3.0».
Нажимаем кнопку «Создать и редактировать»

Понг (Pong) – довольно простая игра, и для описание некоторых особенностей годота, идеально подойдет. В понге у нас есть две ракетки (Игрок и ИИ) и мяч. Главная цель игры забить гол сопернику как можно больше. Мячик может отбиваться от верхнего и нижнего края экрана и от самих ракеток. Если мяч пролетит мимо ракетки то получает гол соперник.

 

 

 

 



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

 

 

 

 

Узлы (Nodes) Сцены (Scenes
Узлы — это фундаментальные строительные блоки вашей игры. Они подобны ингредиентам в рецепте. Существуют десятки их видов, которые могут отображать изображение, воспроизводить звук, представлять камеру и многое другое. Узел так же может быть 3х-мерным объектом. Это могут быть разные объекты, элементы, у Годо их несколько сотен.







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



 
Сцены в годо служат двум целям:



1. Как холст для ваших заметок



2. Организация ваших элементов игры в отдельные сцены, а после объединение в одной главной сцене.







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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Открыв проект мы можем увидеть интерфейс проекта.




В середине программы Годот располагается «Видовой экран»



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



Теперь мы увидим 2х-мерную сцену нашей игры.



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



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



С левой стороны годота мы наблюдаем вкладку «Дерево сцен»



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



Здесь нам понадобиться первый узел, который мы собираемся использовать «Sprite», чтобы найти его среди остальных элементов видите название в поисковик, он отобразит нужный узел



Выберите его из списка. И теперь узел «Sprite» отображается в дереве сцен.



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



Каждый узел имеет инспектор, это набор атрибутов, с которыми мы можем работать и устанавливать значения по желанию. У нашего узла спрайта, имеется атрибут «Texture», который берет изображение и отображает его на видовом экране. Давайте дадим изображение иконки самого годота, который с генерировался вместе с новым проектом, во вкладке «Файловой системы» внизу слева.



Здесь отображается все содержимое (почти все, кроме системных файлов годота) в корневой папке текущего проекта. Здесь есть файл icon.png, это иконка Godot, картинка. Схватите её левой кнопкой мыши и перетащите в инспектор нашего узла, в атрибут «Texture». Как вы видите, подтаскивая спрайт к атрибуту, он подсвечивается синяя линия, отпустите мышку прямо над словом [пусто]

 

 

  


Теперь мы можем видеть спрайт на нашем видовом экране



Теперь в видовом экране мы можем перемещать спрайт и координаты этого узла будут меняться, если раскрыть атрибуты Transform, то там мы увидим положение (position), вращение (Rotation Degree) и масштаб объекта (Scale).



Можете попробовать задать свои значения.



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



Откроется окошко со сохранением сцены. Сцены имеют формат «.tscn».



Давайте там же создадим новую папку с названием «Player» и после переименуем сцену на название папки и сохраним нашу сцену. Папку можно создавать прямо в этом окне, кликните правой кнопкой мыши и выберите «Новая папка».



И после мы про тестим нашу сцену, запустив игру. F6 запускает текущую сцену, либо на панельки сверху справа мы можем найти кнопку запуска сцен





Закроем окошко с игрой.
В годоте в дереве сцен все узлы связанны с друг с другом. Давайте создадим еще один такой же узел спрайта «Sprite». Нажимаем на узел «Sprite» в дереве сцен, а после нажмите на плюсик, чтобы мы могли привязать другой узел к текущему.



Находим узел «Sprite» и добавляем его.



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



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

 

 

 

 

 

 

 

 

Чтобы создать ракетку игрока, нам потребуются пару моментов:
• Ракетка должна быть видимой (это значит, что мы должны привязать спрайт к ракетки)
• Мы должны контролировать ракетку (Это значит нажатием клавиш мы будем перемещать ракетку на игровом поле)
• Ракетка должна реагировать на физику (Иными словами наша ракетка должна иметь физику столкновения, будь то мяч или край игрового поля)

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

 

 

Физические свойства в годот (2D)
KinematicBody2D RigidBody2D
StaticBody2D Area2D


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

KinematicBody

• Он может влиять на другие физические тела, и на него могут влиять другие физические тела
• Сам узел не имеет физическое тело столкновений, и потому к нему придется привязывать другой узел форму столкновений

Вернемся к нашей сцене «Player», удалим дочерний узел спрайта, он нам не понадобиться, щелкните по нему правой кнопкой мыши и внизу выберите удалить



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

Теперь выбрав наш оставшийся спрайт, изменим тип узла на KinematicBody2D. Кликнете снова правой кнопкой мыши по узлу и выберете опцию «Изменить тип», таким образом мы можем менять уже добавленные узлы на нужные узлы.



Вводите в поисковике «KinematicBody2D», пару букв будет достаточно чтобы определить узел, и выбираем



Если присмотреться, то есть и просто узел «KinematicBody», он предназначен для 3х-мерной сцены, но так как мы создаем 2D-игру нам нужен узел «KinematicBody2D». В годоте можно создавать и 3х-мерные игры, обратите внимания что все узлы которые связанные с 2D играми синего цвета, а для 3х-мерных игры, узлы подсвечиваются красным цветом. Есть и другие типы узлов, но о них поговорим позже.

Выберете «KinematicBody2D». А после переименуйте название узла на «Player», щелкнув по название узла два раза, или правой кнопкой по узлу и выбрав опцию «Переименовать».



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



Привяжем KinematicBody2D с еще одним узлом. Нажмите плюсик и наберете в поисковик «Collision», среди 2х-мерных узлов у нас красуются узлы CollisionPolygon2D и CollisionShape2D (а так же узлы, которые были в таблицы с физикой в 2D).

В узле «CollisionPolygon2D» мы можем сами вручную указывать границы столкновение, а в узле CollisionShape2D выбирать готовые формы для столкновений.



Выберете CollisionShape2D.

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



Выбрав узел CollisionShape2D, переходи на инспектор узла справа, там есть атрибут «Shape» (с англ. «Форма»). Кликните по «Пусто» и выберете прямоугольник «RectangleShape2D»



Это будет физическое тело вашего персонажа.



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



Это физическое форма будет стакиваться с нашем мячиком или упираться в край экрана. Обязательно установите позицию по нулям (Transform -> Position: x, y).

Если мы нажмем F6 мы запустим текущую сцену, но мы ничего не увидим, так как форма столкновений невидима. Поэтому мы должны дать нашей ракетки видимый образ. Но как мы видим в нашей файловой системе (а точнее в корневой папки с игрой) нету нужных нам ресурсов. Скачайте тут архив и распакуйте. Там вы увидите папку «Assets», в ней храниться два изображения: ракетка и мяч, а еще музыкальные файлы эффектов и шрифт.



Возьмите папку «Assets» и перетащите его в годот в файловую систему.



Раскройте папку в файловой системе что убедиться, что все перенеслось правильно.



Теперь ваша задача добавить изображение игрока (использовать картинку «Paddle.png» для ракетки). Используйте узел который мы в самом начале рассказывали, добавив текстуру.

У вас должно получиться это:



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



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

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



Теперь, когда мы собрали все нужные узлы, давайте про анализируем. У нас есть узел спрайта «Sprite» для отображения игрока (ракетки), есть узел взаимодействии с физикой «KinematicBody2D» и узел формы столкновения «CollisionShape2D», это все что нужно для создание игрока. Сохраним сцену горячей клавишами «ctrl» + «S», или через меню «Сцена» -> «Сохранить сцену»

Запустите сцену F6, и мы увидим, что ракетка у нас находиться не совсем там, где мы хотели.



Переместим нашу ракетку через transform – position в инспекторе «Player»



Хм… давайте переместим в ручную нашего игрока прямо видовом экране, и мы столкнемся с еще одной проблемой.



Хватая игрока мы будем хватать ближайший к нам узел, в нашем случаи это будет «CollisionShape2D». Чтобы не брать нам дочернее узлы мы можем сделать их невыбираемые. Нажмите на узел «Player», а после на видовом экране сверху этот значок чтобы сделать дочернее объекты невыбираемые.



На дереве сцен, у узла «Player» появиться такой же значок, и теперь вы можете смело его перемещать по экрану, не боясь что что-то сломаете или возьмете не то. Так как при нажатие на видовом экране на ракетку автоматически будет выбираться родительский узел, он же «Player»

 

 

Категория: Разработка игр на Godot Engine | Добавил: Doctor_Bug (14.09.2022)
Просмотров: 79 | Комментарии: 4 | Теги: game, games, Godot, Pong | Рейтинг: 5.0/1
Всего комментариев: 4
avatar
0
1 kucervenovdavid • 02:09, 15.09.2022
Спасибо очень интересный вводный урок хотелось бы больше уроков, желательно по 3 д.
avatar
1
2 Doctor_Bug • 13:21, 15.09.2022
К сожалению данная рабочая программа (не Годот) будет заточена на 2д игры. Возможно в будущем будет освещаться 3д направление вместе с привязкой Blender
avatar
0
3 kucervenovdavid • 16:42, 15.09.2022
Жаль у меня уже графика двух, 3д локации сделана, но мне так же и уроки пиксель арта интересны, ты для него используешь фотошоп или асепрайт, я уже как-то начинал изучать пиксель арт, но изучение 3д мне показалось более интересным.
avatar
0
4 Doctor_Bug • 15:17, 16.09.2022
Aseprite, а для рисование иных не пиксельных элементов использую фотошоп
avatar