Criando um sistema de diálogo em Godot com GDScript

No desenvolvimento de jogos, uma jogabilidade envolvente e uma narrativa cativante são fundamentais para criar experiências memoráveis. Uma ferramenta poderosa que pode ajudá-lo a conseguir isso é um sistema de diálogo.

Com um sistema de diálogo bem implementado, os personagens podem se comunicar, compartilhar informações e interagir com o jogador, adicionando profundidade e imersão ao jogo.

Configurando seu jogo Godot

Comece criando a base do seu jogo. Para este exemplo, configure um ambiente 2D simples com um personagem controlável que pode se mover usando as teclas de seta.

O código usado neste artigo está disponível neste Repositório GitHub e é gratuito para você usar sob a licença do MIT.

Comece criando uma nova cena para o seu personagem jogador. Dentro desta cena, adicione os componentes necessários. Crie um nó CharacterBody2D para representar o corpo do personagem do jogador. Anexe um CollisionShape2D com formato retangular para definir a área de colisão do jogador.

Agora, adicione movimentação de personagens e interação com plataformas usando GDScript. Substitua o script padrão do nó CharacterBody2D pelo seguinte código:

 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)

Este script permite que seu personagem se mova para a esquerda, direita, para cima e para baixo com base nas entradas das teclas de seta. A função move_and_collide garante que o personagem interaja com as plataformas e responda às colisões.

  Como pesquisar o índice de qualidade do ar para uma cidade através da pesquisa do Google

Adicionando a caixa de diálogo

Agora você pode começar a criar o sistema de diálogo. O primeiro passo é adicionar uma caixa de diálogo que exibirá texto quando seu personagem interagir com objetos ou NPCs específicos.

No seu script CharacterBody2D, introduza mais algumas variáveis ​​para lidar com a caixa de diálogo e seu conteúdo:

 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

A dialog_box será responsável por exibir o texto do diálogo, enquanto o close_button permitirá aos jogadores fechar a caixa de diálogo quando necessário.

Na função _ready, crie e inicialize a caixa de diálogo:

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

Exibindo o Texto do Diálogo

Agora você pode se concentrar na exibição do texto na caixa de diálogo. Você pode fazer com que o texto ocupe mais de uma linha e role-o, revelando uma linha de texto por vez.

Modifique sua função _physics_process para lidar com a exibição de linhas de diálogo:

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

Este segmento de código verifica se line_timer é maior que 0. Se for, diminui o temporizador pelo valor delta. Se o cronômetro não estiver ativo e houver mais linhas de diálogo para exibir, ele chama a função show_next_dialogue_line.

Implemente a função show_next_dialogue_line da seguinte forma:

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

   
    line_timer = 3.0

Esta função atualiza o texto dentro da caixa de diálogo com a linha de diálogo atual e incrementa o índice current_line. O line_timer garante que cada linha seja exibida por um breve período antes de avançar para a próxima linha.

  Como Remapear Teclas Modificadoras no iPad

Adicionando um botão Fechar

Agora, você pode dar aos jogadores a capacidade de fechar a caixa de diálogo e continuar jogando. Faça isso com um botão fechar que, ao pressioná-lo, oculta a caixa de diálogo e permite ao jogador retomar sua jornada.

Primeiro, modifique a função _ready para criar um botão fechar e anexar sua funcionalidade.

 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)

Este código cria uma instância da classe Button e personaliza sua aparência e posição. Ele também conecta o sinal pressionado à função _on_close_button_pressed.

Agora implemente a função _on_close_button_pressed. Nesta função, defina a visibilidade da caixa de diálogo e do botão Fechar como falsa. Isso oculta efetivamente a interface de diálogo do player.

Lembre-se de redefinir o índice current_line para 0 para garantir que o diálogo comece do início na próxima vez que o jogador iniciar uma conversa:

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

Com essas mudanças, os jogadores poderão dialogar e fechar a caixa de diálogo quando estiverem prontos para continuar explorando ou interagindo com o mundo do jogo.

Melhores práticas para seu sistema de diálogo

À medida que você continua a desenvolver e refinar seu sistema de diálogo, manter as práticas recomendadas a seguir em mente ajudará a garantir que seu sistema aprimore ao máximo a narrativa do jogo e o envolvimento do jogador.

Consistência é a chave

Mantenha um tom, estilo de escrita e vocabulário consistentes em todo o seu sistema de diálogo. A consistência ajuda os jogadores a se conectarem com os personagens e o mundo do jogo, criando uma experiência imersiva e integrada.

  Icecream Image Resizer é um utilitário de redimensionamento de imagens com predefinições de tamanho

Crie vozes de personagens

Cada personagem deve ter voz e personalidade distintas refletidas em seus diálogos. Considere sua formação, motivações e emoções ao escrever suas falas.

Essa diferenciação adiciona profundidade aos seus personagens e torna as interações mais memoráveis. Você pode facilmente adicionar sons diferentes para personagens diferentes em Godot.

Escolhas significativas

Projete opções de diálogo que tenham consequências significativas. Escolhas que impactam a narrativa, os relacionamentos ou mesmo a mecânica de jogo do jogo incentivam os jogadores a se envolverem com o sistema de diálogo e a investirem emocionalmente em suas decisões.

Teste e Iteração

Teste exaustivamente suas sequências de diálogo para detectar erros de digitação, erros gramaticais ou problemas de ritmo. Participe de testes de jogo para coletar feedback dos jogadores e fazer os ajustes necessários para garantir que o sistema de diálogo flua sem problemas e aprimore a experiência geral de jogo.

Consistência da IU

Certifique-se de que o design e a apresentação do sistema de diálogo correspondam ao design geral da interface do usuário (IU) do seu jogo. Elementos de UI, fontes e cores consistentes criam uma experiência visual coesa que contribui para a imersão do jogo.

Seguindo essas práticas recomendadas, você pode criar um sistema de diálogo que não apenas aprimore a narrativa do jogo, mas também crie uma experiência memorável e envolvente para os jogadores.

Elevando seus jogos Godot com sistemas de diálogo

Incorporar um sistema de diálogo em seus jogos Godot pode melhorar o envolvimento do jogador e revolucionar sua narrativa. Ao permitir que os personagens se comuniquem, expressem emoções e reajam às decisões dos jogadores, você cria um mundo de jogo mais envolvente e interativo.

Com o ambiente amigável de Godot e o poder do GDScript, você tem as ferramentas para criar sistemas de diálogo atraentes que atraem os jogadores para sua narrativa e aprimoram sua experiência geral de jogo.