Креирање система дијалога у Годоу помоћу ГДСцрипт-а

У развоју игара, занимљива игра и задивљујуће приповедање су кључни за стварање незаборавних искустава. Једно моћно средство које вам може помоћи да то постигнете је систем дијалога.

Са добро примењеним системом дијалога, ликови могу да комуницирају, деле информације и да комуницирају са играчем, додајући дубину и урањање вашој игри.

Подешавање ваше игре Годот

Започните стварањем темеља ваше игре. За овај пример, подесите једноставно 2Д окружење са контролисаним карактером који може да се креће помоћу тастера са стрелицама.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

Почните тако што ћете креирати нову сцену за свог лика играча. Унутар ове сцене додајте потребне компоненте. Креирајте ЦхарацтерБоди2Д чвор који представља тело лика играча. Причврстите ЦоллисионСхапе2Д са правоугаоним обликом да бисте дефинисали подручје судара играча.

Сада додајте кретање карактера и интеракцију са платформама користећи ГДСцрипт. Замените подразумевану скрипту чвора ЦхарацтерБоди2Д следећим кодом:

 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)

Ова скрипта омогућава вашем лику да се креће лево, десно, горе и доле на основу уноса тастера са стрелицама. Функција мове_анд_цоллиде осигурава да лик ступа у интеракцију са платформама и реагује на колизије.

Додавање оквира за дијалог

Сада можете почети да креирате систем дијалога. Први корак је додавање оквира за дијалог који ће приказати текст када ваш лик ступи у интеракцију са одређеним објектима или НПЦ-овима.

У скрипту ЦхарацтерБоди2Д унесите још неколико променљивих за руковање оквиром за дијалог и његовим садржајем:

 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

Диалогуе_бок ће бити одговоран за приказивање текста дијалога, док цлосе_буттон ће омогућити играчима да затворе оквир за дијалог када је то потребно.

У функцији _реади, креирајте и иницијализујте оквир за дијалог:

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

Приказивање текста дијалога

Сада се можете фокусирати на приказивање текста у оквиру за дијалог. Можете да направите да се текст простире на више од једног реда и да га померате, откривајући један по ред текста.

Измените своју функцију _пхисицс_процесс да управља приказом линија дијалога:

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

Овај сегмент кода проверава да ли је лине_тимер већи од 0. Ако јесте, смањује тајмер за делта вредност. Ако тајмер није активан, а има више линија дијалога за приказ, он позива функцију схов_нект_диалогуе_лине.

Имплементирајте функцију схов_нект_диалогуе_лине на следећи начин:

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

   
    line_timer = 3.0

Ова функција ажурира текст у оквиру дијалога са тренутном линијом дијалога и повећава индекс текуће_лине. Лине_тимер осигурава да се сваки ред приказује на кратко време пре преласка на следећи ред.

Додавање дугмета за затварање

Сада можете дати играчима могућност да затворе оквир за дијалог и наставе да играју игру. Урадите то помоћу дугмета за затварање које, када га притисне, сакрива оквир за дијалог и омогућава играчу да настави своје путовање.

Прво, измените функцију _реади да бисте креирали дугме за затварање и прикључили његову функционалност.

 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)

Овај код креира инстанцу класе Буттон и прилагођава њен изглед и позицију. Такође повезује притиснути сигнал са функцијом _он_цлосе_буттон_прессед.

Сада имплементирајте функцију _он_цлосе_буттон_прессед. У овој функцији, поставите видљивост и оквира за дијалог и дугмета за затварање на нетачно. Ово ефективно скрива интерфејс дијалога од играча.

Не заборавите да ресетујете индекс цуррент_лине на 0 како бисте били сигурни да дијалог почиње од почетка следећи пут када играч започне разговор:

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

Са овим променама, играчи ће моћи да се укључе у дијалог и затворе оквир за дијалог када буду спремни да наставе да истражују или комуницирају са светом игре.

Најбоље праксе за ваш систем дијалога

Док будете наставили да развијате и усавршавате свој систем дијалога, имајући на уму следеће најбоље праксе ће вам помоћи да осигурате да ваш систем у највећој мери унапреди приповедање ваше игре и ангажовање играча.

Доследност је кључна

Одржавајте доследан тон, стил писања и речник у целом систему дијалога. Конзистентност помаже играчима да се повежу са ликовима и светом игре, стварајући беспрекорно и импресивно искуство.

Црафт Цхарацтер Воицес

Сваки лик треба да има посебан глас и личност која се одражава у њиховим дијалозима. Узмите у обзир њихову позадину, мотивацију и емоције када пишете њихове редове.

Ова диференцијација додаје дубину вашим ликовима и чини интеракције незаборавнијим. Можете лако додати различите звукове за различите ликове у Годоу.

Смислени избори

Дизајнирајте изборе дијалога који имају значајне последице. Избори који утичу на нарацију игре, односе или чак механику игре подстичу играче да се укључе у систем дијалога и емоционално улажу у своје одлуке.

Тестирање и итерација

Темељно тестирајте своје секвенце дијалога да бисте открили све грешке у куцању, граматичке грешке или проблеме са темпом. Укључите се у тестирање играња да бисте прикупили повратне информације од играча и извршили неопходна прилагођавања како бисте осигурали да систем дијалога тече несметано и побољшао целокупно искуство играња.

Конзистентност корисничког интерфејса

Уверите се да дизајн и презентација система дијалога одговарају целокупном дизајну корисничког интерфејса (УИ) ваше игре. Конзистентни елементи корисничког интерфејса, фонтови и боје стварају кохезивно визуелно искуство које доприноси понирању у игру.

Пратећи ове најбоље праксе, можете направити систем дијалога који не само да побољшава наратив ваше игре, већ и ствара незаборавно и импресивно искуство за играче.

Подизање ваших игара Годоа помоћу система дијалога

Укључивање система дијалога у ваше игре Годот може побољшати ангажовање играча и револуционисати ваше приповедање. Омогућавајући ликовима да комуницирају, изражавају емоције и реагују на одлуке играча, стварате импресивнији и интерактивнији свет игре.

Са Годот-овим корисничким окружењем и снагом ГДСцрипт-а, имате алате за прављење убедљивих система дијалога који увлаче играче у вашу причу и побољшавају њихово целокупно искуство играња.