Це машинний переклад, який може містити помилки!
Звідки взялася ця інформація?
Багато з цього – це просто переказ офіційної документації Godot. Нижче наведено кілька корисних посилань на офіційну документацію (я якомога більше рекомендую її замість цієї на Piggy, але якщо ви віддаєте перевагу цій, то просто використовуйте її!)
Корисні ресурси:
А як щодо графіки, чи я повинен створювати її сам?
Ні! Ви можете знайти багато безкоштовних ресурсів тут:
Інші корисні посилання:
Інші ігрові двигуни?
Якщо ви віддаєте перевагу, ви можете використовувати інші ігрові двигуни. Приклади інших ігрових двигунів:
Існує багато інших, не соромтеся пошуку, якщо ви хочете спробувати щось інше!
Що таке Godot?
Godot (Вимовляється Гух-до), це ‘Game Engine’ (Ігровий рушій). Щоб сказати просто, це програма, яка дозволяє вам створювати ігри (або звичайні програми, якщо хочете). Godot може робити майже все, що можуть робити інші ігрові рушії, як 2D, так і 3D.
Приклади ігор, створених у Godot: Godot Showcase
Не лише Indie-ігри були створені у Godot, Sonic Colors Ultimate створено за допомогою Godot!
Як отримати Godot?
Ви можете завантажити Godot з:
- Офіційної сторінки: Godot Official Page.
- Або на Steam: Godot Steam.
Просто завантажте та встановіть (або запустіть на steam).
Налаштування проєкту!
Коли ви запускаєте Godot, з’являється це вікно:
Тут вас запитують про мову програмування, GDScript або C#. GDScript дуже схожий на Python.
Відмінності між GDScript та Python (без кольорів):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
Для змінних у Python вам потрібно просто написати назву змінної. У GDScript ви повинні спочатку написати var
. Щоб створити функції, ви пишете func
замість def
.
Сцени та Вузли
Одним з найважливіших понять у Godot є Сцени та Вузли. Ми можемо почати з вузлів. Вузол - це об’єкт у Godot, і він може представляти все. Це може бути щось, що представляє гравця, ворога, кнопку в меню, текст на екрані, будь-що. Сцени - це колекція вузлів.
Ось ми створимо дуже простий приклад.
Частина 1a - Налаштування сцени “гравця”
У верхній частині вікна Godot, натисніть кнопку “2D”, щоб змінити вигляд на 2D вигляд.
На лівій стороні вікна ви бачите наступний інтерфейс:
Натисніть кнопку “Other Node” та пошукайте “CharacterBody2D”, виберіть її та натисніть “Create”. Це вузол, який використовується для 2D гравця. Ви, можливо, помітите трикутник попередження ⚠️ поруч із вузлом “CharacterBody2D”. Це тому, що йому не вистачає деяких речей, які він хотів би мати.
Якщо ви клацнете правою кнопкою миші на вузлі, там буде кнопка “+ Add Child Node…”. Використовуйте її та додайте два вузли, Sprite2D та CollisionShape2D. Sprite2D використовується для додавання графіки до гравця, а інший - для перевірки зіткнень. Ви також можете дати їм імена, якщо це полегшить відстеження речей. Я дав своєму CharacterBody2D ім’я “Player”. Сцена повинна виглядати так зараз:
Частина 1b - Виправлення ⚠️ на CollisionShape2D
Попереджувальний трикутник у цій ситуації полягає в тому, що CollisionShape2D насправді не має зіткнення. Ви можете виправити це, натиснувши на вузол (зліва), після чого з’явиться панель праворуч. Тут ви отримаєте купу інформації про вузол, яку можна змінити. Не соромтеся поекспериментуйте з тим, що там є. Але ми зосередимося на “Shape”, встановіть його, наприклад, на RectangleShape2D. Це не дуже важливо, ми не будемо використовувати зіткнення тут.
Частина 1c - Додати Sprite, графіка
Якщо ви натискаєте на Sprite2D зліва, з’являється поле справа, де написано “Texture”. Тут ви можете вставити зображення для гравця. Просто перетягніть зображення та відпустіть його в поле.
Ось як це виглядатиме після додавання спрайту.
Частина 2 - Додавання вхідних даних, керування
У верхній частині вікна є меню “Scene - Project - Debug - Editor - Help”. Натисніть “Project” та потім “Project Settings”. Тут з’являється меню з безліччю налаштувань. Натисніть “Input Map”. Тут ви можете налаштувати кнопки на клавіатурі.
- У полі “Add New Action”, напишіть “left”, а потім натисніть “Add”.
- Потім додайте “right”, “up” та “down”.
- Ці дії стануть відомими як “Actions”
- Для кожної “Action” ви можете додати кнопки, натиснувши на кнопку “+” справа.
- Тут просто натисніть на клавіатуру, а потім натисніть Add.
- Додайте кнопки для всіх actions.
Розділ 3 - Додавання скрипта для керування гравцем.
Щоб мати змогу додавати ігрову логіку, тобто робити щось із гравцем, фоном або чим завгодно іншим у грі, нам потрібен скрипт. Скрипти – це код, і їх можна писати двома мовами: GDScript або C#. GDScript є стандартним.
- Натисніть на вузол “CharacterBody2D” (я назвав його “Player”).
- Натисніть кнопку “Attach Script” (дивіться нижче)
- Тут з’явиться вікно, де ви можете вибрати мову (виберіть GDScript) та шлях (просто залиште його з назвою, яка там є, але ви можете дати йому назву), а потім натисніть далі. Тут з’явиться вікно “Script”. Спочатку тут небагато.
extends CharacterBody2D
# Dette er en enkel karakterbevegelse
# Це простий рух персонажа
Єдине, що робить цей код наразі, це те, що код повинен належати до вузла типу “CharacterBody2D”, який є нашим гравцем.
Ми додамо сюди функцію, яку ми будемо використовувати для маніпулювання гравцем:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
# return
# повернення
Фізичний процес?
_physics_process
— це функція, яка оновлюється щоразу в кожному “кадрі”, тобто приблизно 60 разів на секунду (за замовчуванням). Існує інша функція, яка просто називається _process
, яка оновлюється на всьому шляху. Якщо ви хочете, щоб гравець рухався з рівномірною швидкістю, використовуйте _physics_process
.
Тут ми будемо додавати код, який переміщує гравця.
Розділ 4 - Базовий ввід
У розділі 2 ви додали кнопки введення, тепер ми будемо їх використовувати. Існує вбудований об’єкт під назвою Input
, який ми можемо використовувати для перевірки, чи натиснув гравець на те, що ми налаштували в “Input Map”.
Спробуйте додати цей код у _physics_process
код:
if Input.is_action_pressed('right'):
# Рух вправо
velocity.x = 100
# Переміщення та зіткнення
move_and_slide()
Що таке move_and_slide()
?
move_and_slide()
— це вбудована функція в Godot, яка використовується, коли ми хочемо фактично перемістити те, до чого вона застосовується. Без неї гравець не рухатиметься.
Warning
Відступи на рядках дуже важливі, це схоже на те, як у Python.
Що відбувається, коли ви запускаєте програму, натиснувши кнопку відтворення у вікні Godot, а потім “right”?
Якщо зараз нічого не відбувається:
- Ви запам’ятали налаштувати щось у “Input Map”?
- Ви написали
right
і неRight
? Тобто, те, що ви написали в коді, збігається з назвою у input map?
Весь код на даний момент
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
Спробуйте зараз додати код для 'left'
, 'up'
, 'down'
.
Що має бути velocity.x
для left
? А як щодо up
та down
?
Весь код зараз
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Частина 5 - Виправлення коду
Ви, можливо, помітили, що гравець не зупиняється, коли ви відпускаєте напрямок. Ми можемо виправити це зараз!
Перед усіма if
-ами, додайте рядок, який встановлює швидкість до 0. Ви можете зробити це, написавши velocity = Vector2()
Усі швидкості та напрямки в Godot є векторами, це математичне поняття, яке ми зараз не будемо розбирати, але якщо вас цікавить, що це означає, ви можете перейти сюди: Wikipedia vectors.
Весь код зараз
extends CharacterBody2D
func _physics_process(delta: float) -> void:
velocity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Коли ви запускаєте гру зараз, ви можете переміщувати гравця:
Подалі ви можете виправити код, щоб швидкість не була просто числом, а могла зберігатися в іншому місці.
Ви можете, наприклад (перед функцією), додати константу, яка відстежує швидкість.
Весь код в кінці з const
extends CharacterBody2D
const SPEED = 100
func _physics_process(delta: float) -> void:
velocity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = SPEED
if Input.is_action_pressed('left'):
velocity.x = -SPEED
if Input.is_action_pressed('down'):
velocity.y = SPEED
if Input.is_action_pressed('up'):
velocity.y = -SPEED
move_and_slide()
Розділ 6 - Грайте самі!
Якщо ви повернетеся до першої частини, Корисні Ресурси, ви зможете знайти, з чим можете продовжувати грати.
Після цього ви можете спробувати створити свою власну гру. Що ви створите – залежить від вас! Якщо ви хочете створити щось абсолютно нове, робіть це! Якщо ви хочете спробувати наслідувати гру, яка вже існує, робіть це! Найкращий спосіб навчитися – це пробувати!