Sistema de Diálogo para la Unidad

Un sistema de diálogo en juegos es un mecanismo que permite conversaciones interactivas y envolventes entre el jugador y los personajes dentro del mundo del juego. Sirve como un canal de comunicación a través del cual los jugadores pueden interactuar con personajes que no son jugadores (PNJ) u otras entidades, proporcionando un medio para contar historias, progresar en misiones, desarrollar personajes y construcción del mundo.

El objetivo principal de un sistema de diálogo es crear una experiencia dinámica y atractiva para los jugadores al permitirles tomar decisiones, influir en la narrativa del juego y dar forma a sus relaciones con los personajes del juego. Un sistema de diálogo bien diseñado puede mejorar la inmersión del jugador, la inversión emocional y la rejugabilidad.

Cuando se trata del desarrollo de juegos en Unity, crear un sistema de diálogo completo desde cero puede ser bastante extenso, pero es posible comenzar con un ejemplo simplificado para empezar. El siguiente ejemplo cubrirá un sistema de diálogo básico basado en texto usando C# y la Unity UI sistema. Recuerde que este es solo un punto de partida y puede ampliarse y personalizarse según las necesidades específicas.

Crear el administrador de diálogo

  • Cree un nuevo script, llámelo "DialogueManager", luego pegue el siguiente código dentro de él:
using System.Collections;
using UnityEngine;
using UnityEngine.UI;

public class DialogueManager : MonoBehaviour
{
    public Text dialogueText;
    public Button choice1Button;
    public Button choice2Button;
    public Button nextButton;

    private Dialogue currentDialogue;
    private int currentLineIndex = 0;

    void Start()
    {
        // You can load your dialogue data from an external source (e.g., JSON, XML) or create it programmatically.
        // For simplicity, we'll create a sample dialogue here.
        currentDialogue = CreateSampleDialogue();

        // Set up event listeners for buttons
        choice1Button.onClick.AddListener(OnChoice1Selected);
        choice2Button.onClick.AddListener(OnChoice2Selected);
        nextButton.onClick.AddListener(OnNextButtonClicked);

        // Start the dialogue
        StartDialogue();
    }

    private void StartDialogue()
    {
        currentLineIndex = 0;
        DisplayLine(currentDialogue.lines[currentLineIndex]);
    }

    private void DisplayLine(DialogueLine line)
    {
        dialogueText.text = line.text;
        choice1Button.gameObject.SetActive(line.hasChoice);
        choice2Button.gameObject.SetActive(line.hasChoice);
        nextButton.gameObject.SetActive(!line.hasChoice);
    }

    private void OnNextButtonClicked()
    {
        currentLineIndex++;
        if (currentLineIndex < currentDialogue.lines.Length)
        {
            DisplayLine(currentDialogue.lines[currentLineIndex]);
        }
        else
        {
            // Dialogue is over
            EndDialogue();
        }
    }

    private void OnChoice1Selected()
    {
        HandleChoice(currentDialogue.lines[currentLineIndex].choice1);
    }

    private void OnChoice2Selected()
    {
        HandleChoice(currentDialogue.lines[currentLineIndex].choice2);
    }

    private void HandleChoice(Choice choice)
    {
        // Handle the chosen choice (e.g., change variables, trigger events)
        Debug.Log("Selected Choice: " + choice.text);

        // Advance to the next line
        currentLineIndex++;
        DisplayLine(currentDialogue.lines[currentLineIndex]);
    }

    private void EndDialogue()
    {
        // Reset the dialogue UI or close the dialogue box
        Debug.Log("End of Dialogue");
    }

    // Sample dialogue data (you can replace this with loading from an external source)
    private Dialogue CreateSampleDialogue()
    {
        Dialogue dialogue = new Dialogue();

        dialogue.lines = new DialogueLine[]
        {
            new DialogueLine("Hello there! Welcome to the Unity dialogue system example.", false),
            new DialogueLine("What would you like to do?", true, new Choice("Go on an adventure"), new Choice("Stay here")),
            new DialogueLine("Great choice! Have a fantastic adventure!", false),
            new DialogueLine("That's okay. Sometimes staying in one place can be just as exciting!", false),
            new DialogueLine("Thanks for trying out the Unity dialogue system example!", false)
        };

        return dialogue;
    }
}

[System.Serializable]
public class Dialogue
{
    public DialogueLine[] lines;
}

[System.Serializable]
public class DialogueLine
{
    public string text;
    public bool hasChoice;
    public Choice choice1;
    public Choice choice2;

    public DialogueLine(string text, bool hasChoice, Choice choice1 = null, Choice choice2 = null)
    {
        this.text = text;
        this.hasChoice = hasChoice;
        this.choice1 = choice1;
        this.choice2 = choice2;
    }
}

[System.Serializable]
public class Choice
{
    public string text;

    public Choice(string text)
    {
        this.text = text;
    }
}

Para configurar los objetos Texto y Botón de la interfaz de usuario en Unity para el script de DialogueManager, siga los pasos a continuación:

  • En el editor Unity, haga clic con el botón derecho en la ventana Jerarquía y seleccione "UI -> Text" para crear un nuevo objeto de texto de interfaz de usuario.
  • Cambie el nombre del objeto de texto de la interfaz de usuario a "DialogueText."
  • Del mismo modo, cree tres objetos de botón de interfaz de usuario: uno para la opción 1, uno para la opción 2 y otro para el botón "Next" (para avanzar en el diálogo).
  • Nombra los botones como "Choice1Button,""Choice2Button," y "NextButton" respectivamente.
  • Coloque el texto y los botones de la interfaz de usuario en el lienzo según su diseño preferido. Es posible que desee colocar el texto de la interfaz de usuario en el centro de la pantalla y los botones debajo del cuadro de texto.
  • Ajuste la fuente, el tamaño, el color y otras propiedades del texto de la interfaz de usuario para que se adapte al estilo visual de su juego.
  • Personalice la apariencia de los botones de la interfaz de usuario, como cambiar sus colores y etiquetas de texto.
  • En el editor Unity, seleccione el GameObject "DialogueManager" (el que creó para adjuntar el script).
  • En la ventana del Inspector, verá el componente de secuencia de comandos "Dialogue Manager". Arrastre y suelte los objetos Texto y Botón de la interfaz de usuario desde la ventana Jerarquía a los campos públicos correspondientes en el componente de secuencia de comandos.
  • Al asignar estas referencias, la secuencia de comandos de DialogueManager puede acceder al texto y los botones de la interfaz de usuario en la escena, lo que le permite actualizar el contenido del texto y controlar su visibilidad según sea necesario durante el diálogo.
  • Guarde la escena para guardar los cambios de variables.

Al ejecutar el juego o interactuar con los activadores de diálogo, DialogueManager debería poder mostrar el texto del diálogo y las opciones utilizando los elementos de la interfaz de usuario a los que se hace referencia en el lienzo.

Conclusión

Un sistema de diálogo efectivo en los juegos brinda a los jugadores agencia, impacto y un sentido de participación en el mundo virtual, lo que hace que la experiencia de juego sea más rica y atractiva. A medida que las narrativas de los juegos y la narración interactiva se vuelven más sofisticadas, los sistemas de diálogo juegan un papel cada vez más importante en la configuración del viaje del jugador y la creación de experiencias de juego memorables.

Artículos sugeridos
Controlador de coche para Unity
Implementación del sistema Parkour en Unity
Creando movimiento de jugadores en unidad
Controlador de helicóptero para Unity
Cómo hacer control de grúa en Unity
Controlador de avión para Unity
Tutorial de salto de pared 3D y 2D de Player para Unity