Tworzenie systemu dialogowego w Godot za pomocą GDScript
W tworzeniu gier angażująca rozgrywka i wciągająca fabuła są kluczem do tworzenia niezapomnianych wrażeń. Jednym z potężnych narzędzi, które mogą pomóc w osiągnięciu tego celu, jest system dialogowy.
Prawidłowo wykonany mechanizm dialogowy umożliwia postaciom konwersację, wymianę danych i nawiązywanie kontaktu z graczami, zwiększając tym samym bogactwo i wciągającą jakość rozgrywki.
Konfigurowanie gry Godot
Rozpocznij proces tworzenia gry, budując jej podstawową strukturę. W tym przypadku należy stworzyć podstawową dwuwymiarową scenerię z awatarem, który może poruszać się za pomocą klawiszy strzałek.
Kod źródłowy wykorzystany w tej publikacji jest dostępny za pośrednictwem publicznego repozytorium w serwisie GitHub, który oferuje go bezpłatnie na warunkach powszechnie akceptowanej licencji MIT.
Włącz podany fragment kodu do Unity, inicjując nowe ustawienie obecności postaci gracza. Wprowadź instancję obiektu CharacterBody2D
i połącz ją ze sceną. Następnie dodaj komponent CollisionShape2D
o prostokątnym kształcie, aby określić granice, w których gracz wchodzi w interakcje z innymi obiektami w świecie gry.
Włącz mobilność postaci i interaktywność z obiektami opartymi na platformie, wykorzystując GDScript do zastąpienia domyślnego skryptu komponentu CharacterBody2D. Dostarczony kod jest następujący:
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)
Niniejszy kod umożliwia bohaterowi nawigację za pomocą poleceń klawiszy strzałek, ułatwiając mu poruszanie się po różnych platformach, biorąc pod uwagę wszelkie interakcje lub kolizje, które mogą wystąpić.
Dodawanie okna dialogowego
Rozpoczynając tworzenie systemu dialogowego, początkowa faza obejmuje włączenie interfejsu do wyświetlania tekstu po interakcji między postacią gracza a określonymi obiektami lub postaciami niezależnymi (NPC).
Aby zwiększyć funkcjonalność naszego skryptu CharacterBody2D
, powinniśmy wprowadzić dodatkowe zmienne, które pozwolą nam efektywnie zarządzać oknem dialogowym i jego zawartością. Można to osiągnąć poprzez wprowadzenie nowych zmiennych, takich jak _dialogBox
, _previousLine
i _currentLine
. Pierwsza z nich będzie przechowywać odniesienie do obiektu okna dialogowego, podczas gdy dwie ostatnie będą reprezentować odpowiednio bieżącą linię wpisywaną w polu tekstowym i poprzednią linię. Wykorzystując te zmienne, możemy zaimplementować funkcje takie jak przywoływanie historii i aktualizowanie pola tekstowego w czasie rzeczywistym podczas pisania.
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
Pole dialogowe
jest przeznaczone do wyświetlania treści konwersacji, a przycisk zamykania
służy użytkownikom do zamykania okna dialogowego, gdy uznają to za konieczne.
W funkcji ready
utworzę i zainicjuję okno dialogowe dla naszej aplikacji. To okno dialogowe jest niezbędne do zapewnienia interfejsu między użytkownikiem a programem, umożliwiając mu interakcję z nim w znaczący sposób. Okno dialogowe może wyświetlać różne komunikaty lub monity w zależności od działań wykonywanych przez użytkownika lub program. Dodatkowo, okno dialogowe służy jako kontener dla innych komponentów, które dodamy później, takich jak przyciski lub pola tekstowe, które umożliwią użytkownikom wprowadzanie danych lub wykonywanie określonych zadań w aplikacji.
func _ready():
dialogue_box = Label.new()
dialogue_box.visible = false
add_child(dialogue_box)
Wyświetlanie tekstu dialogowego
Możesz teraz skoncentrować się na prezentacji treści w oknie dialogowym. Możliwe jest rozszerzenie tekstu na wiele wierszy i włączenie przewijania, pokazując tylko jeden wiersz na raz.
Aby zmodyfikować funkcję procesu fizyki w celu dostosowania do wyświetlania linii dialogowych, wykonaj następujące kroki:1. Dodaj nową zmienną o nazwie “dialogueLines”, aby przechowywać dane tekstowe dla każdej linii dialogu. Można to zrobić, tworząc pustą tablicę i przypisując ją do klucza “dialogueLines” w żądanym obiekcie lub skrypcie.2. Zaktualizuj pętlę symulacji, aby uwzględnić obsługę linii dialogowych. W tej pętli pobierz dane tekstowe z tablicy “dialogueLines”, używając wartości indeksu jako identyfikatora. Następnie zaktualizuj odpowiednio pozycjonowanie i renderowanie dymka mowy w oparciu o właściwości zdefiniowane w oryginalnym dokumencie projektowym.
if line_timer > 0:
line_timer -= delta
elif current_line < dialogue_lines.size():
show_next_dialogue_line()
Podany fragment kodu sprawdza, czy wartość zmiennej line\_timer przekracza określony próg. Jeśli warunek ten jest spełniony, wartość timera jest zmniejszana o określoną wartość delta. Ponadto, jeśli timer jest aktualnie nieaktywny, a do wyświetlenia pozostaje dodatkowa treść dialogu, wywoływany jest podprogram show\_next\_dialog\_line.
Zaimplementuj funkcjęshow_next_dialog_line w następujący sposób:
func show_next_dialogue_line():
dialogue_box.text = dialogue_lines[current_line]
current_line \\+= 1
# Display each line for 3 seconds
line_timer = 3.0
Funkcja present-day modyfikuje tekst zawarty w dymku z najnowszą wypowiedzią i podnosi wartość licznika bieżącej linii. Licznik czasu, określany jako “line\_timer”, reguluje czas, przez jaki każda wypowiedź pozostaje widoczna na ekranie przed przejściem do kolejnej wiadomości.
Dodanie przycisku zamknięcia
Możesz teraz dać graczom opcję odrzucenia okna rozmowy i kontynuowania rozgrywki. Można to osiągnąć poprzez włączenie przycisku “zamknij” w oknie dialogowym, który po naciśnięciu ukrywa wspomniane okno i umożliwia uczestnikowi ponowne dołączenie do postępu gry.
Zmodyfikuj istniejącą funkcję ready
w celu wygenerowania przycisku zamykania z odpowiednią funkcjonalnością poprzez włączenie niezbędnego kodu HTML dla przycisku zamykania w funkcji detektora zdarzeń, która otwiera okno modalne.
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)
Dostarczony kod generuje obiektButton , dostosowuje jego wizualną prezentację i umiejscowienie oraz ustanawia połączenie między sygnałem zdarzenia naciśnięcia a funkcją\_on\_close\_button\_pressed\*.
Włącz nową metodę o nazwie _on_close_button_pressed
do klasy GameUIManager
. W ramach tej funkcji upewnij się, że zarówno widoczność okna dialogowego, jak i jego przycisku zamykania są ustawione na false
. W ten sposób użytkownik nie będzie już mógł przeglądać interfejsu dialogowego ani wchodzić z nim w interakcje.
Aby rozpocząć od nowa, rozsądnie jest przywrócić indeks bieżącej linii z powrotem do pierwotnego stanu zerowego, aby zagwarantować, że nasz dyskurs rozpocznie się od nowa za każdym razem, gdy uczestnik poprosi o komunikację:
func _on_close_button_pressed():
dialogue_box.visible = false
close_button.visible = false
current_line = 0
Dzięki tej modyfikacji uczestnicy będą mieli możliwość wzięcia udziału w rozmowie i odrzucenia okna dialogowego według własnego uznania, umożliwiając im wznowienie nawigacji lub interakcji ze środowiskiem cyfrowym według własnego uznania.
Najlepsze praktyki dla systemu dialogowego
Skupienie się na tych zalecanych wytycznych podczas stopniowego ulepszania i dopracowywania modelu konwersacji może ułatwić optymalne wzbogacenie głębi narracji i zanurzenie graczy.
Spójność jest kluczowa
Utrzymanie jednolitego podejścia językowego ma kluczowe znaczenie dla wspierania autentycznej więzi między graczem a postaciami w grze, jednocześnie promując spójną atmosferę w wirtualnym środowisku. Ta niezachwiana spójność umożliwia nawiązanie relacji między graczem a narracją, zwiększając w ten sposób jego ogólne wrażenia, zapewniając płynną i wciągającą przygodę.
Twórz głosy postaci
Aby stworzyć autentyczne i przekonujące postacie, ważne jest, aby nadać każdej osobie unikalny głos i temperament, który emanuje z ich historii, celów i uczuć. Pozwoli to czytelnikom lub widzom lepiej zrozumieć i połączyć się z nimi na poziomie emocjonalnym.
Włączenie charakterystycznych wzorców mowy i manier dla każdej postaci nie tylko zwiększa ich indywidualność, ale także przyczynia się do niezapomnianych wymian między nimi, ponieważ zapewnia unikalny identyfikator, który odróżnia jedną osobowość od drugiej. Na szczęście implementacja tych wariacji jest prosta w ramach Godota, umożliwiając programistom tworzenie różnorodnych sygnałów dźwiękowych przy minimalnym wysiłku.
Znaczące wybory
Uwzględnij wyniki wyborów, które mają znaczący wpływ zarówno na fabułę, jak i interakcje między graczem a postacią. Wpływając na takie aspekty, jak rozwój fabuły, dynamika interpersonalna lub podstawowe zasady gry, te konsekwentne wybory motywują użytkowników do aktywnego uczestniczenia w sekwencjach konwersacji i wspierają emocjonalne zaangażowanie w ich wybory.
Testowanie i iteracja
Przeprowadź kompleksową ocenę swoich sekwencji dialogowych, dokładnie sprawdzając błędy ortograficzne, niespójności gramatyczne i brak równowagi w tempie. Zastosuj techniki testowania gry, aby zebrać spostrzeżenia od graczy i wdrożyć modyfikacje w razie potrzeby, aby zagwarantować płynną interakcję i lepsze wrażenia z gry dzięki systemowi dialogowemu.
Spójność interfejsu użytkownika
Projektując system dialogowy dla gry wideo, ważne jest, aby upewnić się, że jego wygląd i układ są zgodne z szerszym projektem interfejsu użytkownika gry. Utrzymanie spójności w zakresie elementów wizualnych, takich jak style czcionek, schematy kolorów i inne elementy graficzne, może pomóc w tworzeniu wciągającego środowiska gry poprzez promowanie jednolitego wyglądu we wszystkich aspektach gry.
Przestrzeganie tych zalecanych podejść pozwala na opracowanie systemu opartego na dialogach, który nie tylko podnosi poziom fabuły w grze, ale także sprzyja niezapomnianym i wciągającym spotkaniom dla graczy.
Ulepszanie gier Godot za pomocą systemów dialogowych
Integracja systemu opartego na dialogach w grach Godot może potencjalnie zwiększyć zaangażowanie graczy i przekształcić techniki narracyjne. Ułatwiając komunikację postaci, wyrażanie emocji i reagowanie na wybory gracza, tworzy się coraz bardziej wciągające i połączone ze sobą środowisko gry.
Wykorzystując intuicyjną platformę dostarczaną przez Godot i wykorzystując możliwości jej języka skryptowego, GDScript, deweloperzy są wyposażeni w środki do tworzenia wciągających systemów dialogowych, które skutecznie zanurzają graczy w fascynującej narracji i podnoszą ich ogólne wrażenia z gry.