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).
- 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.
- Dentro do Canvas, crie um Panel (para ser a caixa de diálogo) e um Text – TextMeshPro (para o texto).
- Posicione o Panel na parte inferior da tela, com uma cor semi-transparente.
- Ajuste o TextMeshPro para caber dentro do Panel. Este será o nosso campo de texto.
- 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:
StartDialog()
: Ativa a caixa de diálogo e mostra a primeira frase.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).
- Crie um novo objeto vazio na cena e adicione um Box Collider 2D nele. Marque a opção Is Trigger.
- 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?