Exemplo de sistema de diálogo simples em Unity, com caixa de texto transparente e texto em pixel art sobreposto a um cenário de floresta.

Como Fazer um Sistema de Diálogo Simples na Unity (e Não Ficar Maluco)

Todo mundo que começa a criar um RPG, um jogo de aventura ou até mesmo um plataformer com história, chega em um ponto crucial: como fazer um personagem falar? A gente sabe a sensação. Você começa a pesquisar sobre sistemas de dialog tree, nodes, e de repente, se depara com um monte de teoria que mais confunde do que ajuda.

Se você já pensou em desistir de ter história no seu jogo por causa da complexidade, para tudo. A gente está aqui pra te provar que o básico já te leva longe. O nosso objetivo hoje é criar um sistema de diálogo funcional, o mais simples possível. Sem firulas, sem complexidade. Apenas o que você precisa pra ter seu personagem falando agora.

Vamos começar pelo básico.


Passo 1: A Tela de Diálogo (A Interface)

Primeiro, a gente precisa de um lugar para o texto aparecer. Na Unity, a gente faz isso usando o sistema de UI (User Interface).

  1. No painel Hierarchy, clique com o botão direito e vá em UI -> Canvas. O Canvas é a tela onde todos os elementos de UI vão ficar.
  2. Dentro do Canvas, crie um Panel (para ser a caixa de diálogo) e um Text – TextMeshPro (para o texto).
  3. Posicione o Panel na parte inferior da tela, com uma cor semi-transparente.
  4. Ajuste o TextMeshPro para caber dentro do Panel. Este será o nosso campo de texto.
  5. Desative o Panel no Inspector. Ele só deve aparecer quando o diálogo começar.

Pronto. A interface visual está feita.


Passo 2: O Código do Diálogo

Agora, a parte do código. A gente precisa de um script para controlar o que é exibido. Vamos criar um novo script chamado DialogManager.

Nesse script, a gente vai ter uma lista de frases e um índice para saber em qual frase estamos. Também vamos precisar referenciar o nosso objeto de texto na tela.

using UnityEngine;
using TMPro;

public class DialogManager : MonoBehaviour
{
    public GameObject dialogBox;
    public TextMeshProUGUI dialogText;
    
    public string[] dialogSentences;
    private int currentSentenceIndex = 0;

    // Função para começar o diálogo
    public void StartDialog()
    {
        dialogBox.SetActive(true);
        currentSentenceIndex = 0;
        dialogText.text = dialogSentences[currentSentenceIndex];
    }

    // Função para avançar para a próxima frase
    public void NextSentence()
    {
        currentSentenceIndex++;

        // Verifica se chegamos ao fim do diálogo
        if (currentSentenceIndex < dialogSentences.Length)
        {
            dialogText.text = dialogSentences[currentSentenceIndex];
        }
        else
        {
            // Fim do diálogo
            dialogBox.SetActive(false);
        }
    }
}

O que esse código faz? Ele basicamente tem duas funções:

  1. StartDialog(): Ativa a caixa de diálogo e mostra a primeira frase.
  2. NextSentence(): Passa para a próxima frase na lista. Se a gente chegar no final, a caixa de diálogo é desativada.

Passo 3: Colocando no Jogo (A Lógica de Interação)

Por último, a gente precisa de um jeito de começar o diálogo. A forma mais simples é com um trigger (um gatilho).

  1. Crie um novo objeto vazio na cena e adicione um Box Collider 2D nele. Marque a opção Is Trigger.
  2. Adicione um novo script, por exemplo, NPCInteraction.
using UnityEngine;

public class NPCInteraction : MonoBehaviour
{
    public DialogManager dialogManager;

    private void OnTriggerEnter2D(Collider2D other)
    {
        // Verifica se o objeto que entrou é o jogador
        if (other.CompareTag("Player"))
        {
            dialogManager.StartDialog();
        }
    }
}

Como funciona? Quando o seu jogador (que deve ter a tag “Player”) entrar no trigger, a gente chama a função StartDialog() do DialogManager. Depois, o jogador pode pressionar uma tecla (a gente pode adicionar isso depois) ou clicar para avançar as frases, chamando a função NextSentence().


Conclusão

É isso. Três passos e você tem um sistema de diálogo básico e funcional. O importante não é fazer o sistema mais complexo do mundo, mas sim fazer algo que funcione e que te permita seguir em frente no desenvolvimento do seu jogo.

Afinal, feito é melhor que perfeito. E agora seu jogo já pode começar a contar sua história. E aí, qual a primeira coisa que seu personagem vai dizer?

Compartilhe !