Tworzenie systemu dialogowego w Godot za pomocą GDScript

W tworzeniu gier wciągająca rozgrywka i wciągająca opowieść są kluczem do tworzenia niezapomnianych wrażeń. Potężnym narzędziem, które może Ci w tym pomóc, jest system dialogu.

Dzięki dobrze zaimplementowanemu systemowi dialogów postacie mogą komunikować się, dzielić się informacjami i wchodzić w interakcję z graczem, dodając głębi i zanurzenia w grze.

Konfigurowanie gry Godot

Zacznij od stworzenia podstaw swojej gry. W tym przykładzie skonfiguruj proste środowisko 2D z sterowaną postacią, którą można poruszać się za pomocą klawiszy strzałek.

Kod użyty w tym artykule jest dostępny w this Repozytorium GitHuba i jest darmowy do użytku na licencji MIT.

Rozpocznij od stworzenia nowej sceny dla swojej postaci gracza. Wewnątrz tej sceny dodaj niezbędne komponenty. Utwórz węzeł CharacterBody2D, który będzie reprezentował ciało postaci gracza. Dołącz obiekt CollisionShape2D o prostokątnym kształcie, aby zdefiniować obszar kolizji odtwarzacza.

Teraz dodaj ruch postaci i interakcję z platformami za pomocą GDScript. Zastąp domyślny skrypt węzła CharacterBody2D następującym kodem:

 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)

Skrypt ten umożliwia Twojej postaci poruszanie się w lewo, w prawo, w górę i w dół w oparciu o klawisze strzałek. Funkcja move_and_collide dba o to, aby postać wchodziła w interakcję z platformami i reagowała na kolizje.

Dodanie okna dialogowego

Teraz możesz przystąpić do tworzenia systemu dialogowego. Pierwszym krokiem jest dodanie okna dialogowego, w którym będzie wyświetlany tekst, gdy Twoja postać wejdzie w interakcję z określonymi obiektami lub NPC-ami.

W swoim skrypcie CharacterBody2D wprowadź kilka dodatkowych zmiennych do obsługi okna dialogowego i jego zawartości:

 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

Dialog_box będzie odpowiedzialny za wyświetlanie tekstu dialogu, natomiast przycisk zamykania pozwoli graczom zamknąć okno dialogowe, gdy zajdzie taka potrzeba.

W funkcji _ready utwórz i zainicjuj okno dialogowe:

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

Wyświetlanie tekstu dialogu

Teraz możesz skupić się na wyświetlaniu tekstu w oknie dialogowym. Możesz rozciągnąć tekst na więcej niż jedną linię i przewijać go, odsłaniając po jednym wierszu tekstu na raz.

Zmodyfikuj funkcję _physics_process, aby obsługiwała wyświetlanie linii dialogowych:

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

Ten segment kodu sprawdza, czy line_timer jest większy niż 0. Jeśli tak, zmniejsza licznik czasu o wartość delta. Jeśli licznik czasu nie jest aktywny i jest więcej linii dialogowych do wyświetlenia, wywołuje funkcję show_next_dialogue_line.

Zaimplementuj funkcję show_next_dialogue_line w następujący sposób:

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

   
    line_timer = 3.0

Ta funkcja aktualizuje tekst w oknie dialogowym zgodnie z bieżącą linią dialogową i zwiększa indeks current_line. Line_timer zapewnia, że ​​każda linia będzie wyświetlana przez krótki czas przed przejściem do następnej linii.

Dodanie przycisku zamykania

Teraz możesz dać graczom możliwość zamknięcia okna dialogowego i kontynuowania gry. Zrób to za pomocą przycisku zamykania, który po naciśnięciu ukrywa okno dialogowe i pozwala graczowi wznowić podróż.

Najpierw zmodyfikuj funkcję _ready, aby utworzyć przycisk zamykania i dołącz jego funkcjonalność.

 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)

Ten kod tworzy instancję klasy Button i dostosowuje jej wygląd i położenie. Łączy także naciśnięty sygnał z funkcją _on_close_button_pressed.

Teraz zaimplementuj funkcję _on_close_button_pressed. W tej funkcji ustaw widoczność zarówno okna dialogowego, jak i przycisku zamykania na Fałsz. To skutecznie ukrywa interfejs dialogowy przed graczem.

Pamiętaj, aby zresetować indeks current_line na 0, aby mieć pewność, że dialog zacznie się od początku przy następnym rozpoczęciu rozmowy przez gracza:

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

Dzięki tym zmianom gracze będą mogli nawiązać dialog i zamknąć okno dialogowe, gdy będą gotowi na dalszą eksplorację lub interakcję ze światem gry.

Najlepsze praktyki dotyczące Twojego systemu dialogu

W miarę ciągłego rozwijania i udoskonalania systemu dialogów, pamiętanie o poniższych najlepszych praktykach pomoże zapewnić, że Twój system w najszerszym zakresie ulepszy opowiadanie historii w grze i zaangażowanie graczy.

Spójność jest kluczem

Utrzymuj spójny ton, styl pisania i słownictwo w całym systemie dialogowym. Spójność pomaga graczom łączyć się z postaciami i światem gry, tworząc płynne i wciągające wrażenia.

Twórz głosy postaci

Każda postać powinna mieć odrębny głos i osobowość odzwierciedlone w dialogach. Pisząc swoje kwestie, weź pod uwagę ich pochodzenie, motywacje i emocje.

To zróżnicowanie dodaje głębi twoim postaciom i sprawia, że ​​interakcje są bardziej zapadające w pamięć. W Godocie możesz z łatwością dodawać różne dźwięki dla różnych postaci.

Znaczące wybory

Projektuj wybory dialogowe, które mają znaczące konsekwencje. Wybory, które wpływają na narrację gry, relacje, a nawet mechanikę rozgrywki, zachęcają graczy do zaangażowania się w system dialogu i emocjonalnego inwestowania w swoje decyzje.

Testowanie i iteracja

Dokładnie przetestuj sekwencje dialogów, aby wykryć literówki, błędy gramatyczne lub problemy z tempem. Weź udział w testach rozgrywki, aby zebrać opinie od graczy i wprowadzić niezbędne zmiany, aby zapewnić płynne działanie systemu dialogów i poprawę ogólnych wrażeń z rozgrywki.

Spójność interfejsu użytkownika

Upewnij się, że projekt i prezentacja systemu dialogów odpowiada ogólnemu projektowi interfejsu użytkownika (UI) Twojej gry. Spójne elementy interfejsu użytkownika, czcionki i kolory tworzą spójne wrażenia wizualne, które przyczyniają się do zanurzenia się w grze.

Postępując zgodnie z tymi najlepszymi praktykami, możesz stworzyć system dialogów, który nie tylko ulepszy narrację gry, ale także zapewni graczom niezapomniane i wciągające wrażenia.

Podnieś poziom gier Godot dzięki systemom dialogu

Włączenie systemu dialogów do gier Godot może zwiększyć zaangażowanie graczy i zrewolucjonizować sposób opowiadania historii. Umożliwiając postaciom komunikację, wyrażanie emocji i reagowanie na decyzje gracza, tworzysz bardziej wciągający i interaktywny świat gry.

Dzięki przyjaznemu dla użytkownika środowisku Godot i mocy GDScript masz narzędzia do tworzenia fascynujących systemów dialogów, które wciągają graczy w Twoją narrację i poprawiają ich ogólne wrażenia z gry.