Створення діалогової системи в Godot за допомогою GDScript

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

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

Налаштування гри Godot

Почніть зі створення основи вашої гри. Для цього прикладу налаштуйте просте двовимірне середовище з керованим персонажем, який можна переміщати за допомогою клавіш зі стрілками.

Код, використаний у цій статті, доступний тут Репозиторій GitHub і є безкоштовним для використання за ліцензією MIT.

Почніть із створення нової сцени для персонажа гравця. Всередині цієї сцени додайте необхідні компоненти. Створіть вузол CharacterBody2D для представлення тіла персонажа гравця. Прикріпіть CollisionShape2D прямокутної форми, щоб визначити зону зіткнення гравця.

Тепер додайте рух персонажа та взаємодію з платформами за допомогою GDScript. Замініть типовий сценарій вузла CharacterBody2D таким кодом:

 extends CharacterBody2D

var speed = 300

func _physics_process(delta):
    var input_dir = Vector2.ZERO

    if Input.is_action_pressed("ui_left"):
        input_dir.x -= 1

    if Input.is_action_pressed("ui_right"):
        input_dir.x += 1

    if Input.is_action_pressed("ui_up"):
        input_dir.y -= 1

    if Input.is_action_pressed("ui_down"):
        input_dir.y += 1

    velocity = input_dir.normalized() * speed
    move_and_collide(velocity * delta)

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

Додавання діалогового вікна

Тепер можна приступати до створення діалогової системи. Перший крок — додати діалогове вікно, яке відображатиме текст, коли ваш персонаж взаємодіє з певними об’єктами або NPC.

У вашому сценарії CharacterBody2D введіть ще кілька змінних для обробки діалогового вікна та його вмісту:

 var dialogue_box: Label
var close_button: Button
var dialogue_lines: Array = ["Hello, adventurer!", "Welcome to our village."]

var current_line: int = 0
var line_timer: float = 0

Dialogue_box відповідатиме за відображення тексту діалогу, тоді як close_button дозволить гравцям закривати діалогове вікно, коли це буде потрібно.

У функції _ready створіть та ініціалізуйте діалогове вікно:

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

Відображення тексту діалогу

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

Змініть свою функцію _physics_process для обробки відображення рядків діалогу:

 if line_timer > 0:
    line_timer -= delta
elif current_line < dialogue_lines.size():
    show_next_dialogue_line()

Цей сегмент коду перевіряє, чи line_timer більше 0. Якщо так, таймер зменшується на значення дельта. Якщо таймер не активний і є більше рядків діалогу для відображення, він викликає функцію show_next_dialogue_line.

Реалізуйте функцію show_next_dialogue_line наступним чином:

 func show_next_dialogue_line():
    dialogue_box.text = dialogue_lines[current_line]
    current_line += 1

   
    line_timer = 3.0

Ця функція оновлює текст у діалоговому вікні поточним рядком діалогу та збільшує індекс поточного_рядка. line_timer забезпечує відображення кожного рядка протягом короткого проміжку часу перед переходом до наступного рядка.

Додавання кнопки “Закрити”.

Тепер ви можете надати гравцям можливість закрити діалогове вікно та продовжити гру. Зробіть це за допомогою кнопки закриття, яка при натисканні приховує діалогове вікно та дозволяє гравцеві продовжити свою подорож.

По-перше, змініть функцію _ready, щоб створити кнопку закриття та додати її функції.

 func _ready():
    dialogue_box = Label.new()
    dialogue_box.visible = false
    add_child(dialogue_box)

    close_button = Button.new()
    close_button.text = "Close"
    close_button.position = Vector2(50, 30)
    close_button.visible = false
    close_button.pressed.connect(_on_close_button_pressed)
    add_child(close_button)

Цей код створює екземпляр класу Button і налаштовує його вигляд і положення. Він також з’єднує натиснутий сигнал із функцією _on_close_button_pressed.

Тепер реалізуйте функцію _on_close_button_pressed. У цій функції встановіть значення false для видимості діалогового вікна та кнопки закриття. Це фактично приховує діалоговий інтерфейс від гравця.

Не забудьте скинути індекс current_line до 0, щоб переконатися, що діалог починається з початку наступного разу, коли гравець ініціює розмову:

 func _on_close_button_pressed():
    dialogue_box.visible = false
    close_button.visible = false
    current_line = 0

Завдяки цим змінам гравці зможуть вести діалог і закривати діалогове вікно, коли будуть готові продовжувати досліджувати або взаємодіяти з ігровим світом.

Найкращі практики для вашої системи діалогу

У міру того, як ви продовжуєте розвивати та вдосконалювати свою діалогову систему, пам’ятаючи про наведені нижче найкращі методи, ви допоможете переконатися, що ваша система максимально покращить оповідання історії вашої гри та залучення гравців.

Послідовність є ключовим фактором

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

Ремісничі голоси персонажів

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

Ця диференціація додає глибини вашим персонажам і робить взаємодію більш запам’ятовуваною. Ви можете легко додати різні звуки для різних персонажів у Godot.

Значущий вибір

Створюйте варіанти діалогу, які мають значущі наслідки. Вибір, який впливає на сюжет гри, стосунки чи навіть ігрову механіку, заохочує гравців брати участь у системі діалогу та емоційно вкладати свої рішення.

Тестування та ітерація

Ретельно перевірте свої діалогові послідовності, щоб виявити помилки друку, граматичні помилки чи проблеми з темпом. Візьміть участь у ігровому тестуванні, щоб зібрати відгуки від гравців і внести необхідні корективи, щоб переконатися, що система діалогів протікає плавно та покращує загальний досвід гри.

Узгодженість інтерфейсу користувача

Переконайтеся, що дизайн і представлення діалогової системи відповідають загальному дизайну інтерфейсу користувача (UI) вашої гри. Послідовні елементи інтерфейсу, шрифти та кольори створюють цілісне візуальне враження, яке сприяє зануренню в гру.

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

Покращуйте свої ігри Годо за допомогою діалогових систем

Впровадження системи діалогів у ваші ігри Godot може покращити залучення гравців і змінити ваше оповідання. Дозволяючи персонажам спілкуватися, виражати емоції та реагувати на рішення гравців, ви створюєте більш захоплюючий та інтерактивний ігровий світ.

Завдяки зручному середовищу Godot і потужності GDScript у вас є інструменти для створення привабливих діалогових систем, які залучають гравців до вашої розповіді та покращують їхній загальний досвід гри.