Sistem Dialog untuk Persatuan

Sistem dialog di games ​​adalah mekanisme yang memungkinkan percakapan interaktif dan mendalam antara pemain dan karakter dalam dunia game. Ini berfungsi sebagai saluran komunikasi di mana pemain dapat berinteraksi dengan karakter non-pemain (NPC) atau entitas lain, menyediakan sarana untuk bercerita, perkembangan pencarian, pengembangan karakter, dan pembangunan dunia.

Tujuan utama sistem dialog adalah untuk menciptakan pengalaman yang dinamis dan menarik bagi pemain dengan memungkinkan mereka membuat pilihan, memengaruhi narasi game, dan membentuk hubungan mereka dengan karakter dalam game. Sistem dialog yang dirancang dengan baik dapat meningkatkan pengalaman pemain, investasi emosional, dan kemampuan bermain ulang.

Dalam hal pengembangan game di Unity, membuat sistem dialog lengkap dari awal bisa menjadi hal yang cukup ekstensif, namun Anda bisa memulai dengan contoh yang disederhanakan untuk memulai. Contoh di bawah ini akan mencakup sistem dialog berbasis teks dasar menggunakan C# dan sistem Unity UI. Ingatlah bahwa ini hanyalah titik awal, dan dapat diperluas serta disesuaikan berdasarkan kebutuhan spesifik.

Buat Manajer Dialog

  • Buat skrip baru, beri nama "DialogueManager", lalu tempelkan kode di bawah ini ke dalamnya:
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;
    }
}

Untuk menyiapkan objek Teks dan Tombol UI di Unity untuk skrip DialogueManager, ikuti langkah-langkah di bawah ini:

  • Di editor Unity, klik kanan di jendela Hierarki dan pilih "UI -> Text" untuk membuat objek Teks UI baru.
  • Ganti nama objek Teks UI menjadi "DialogueText."
  • Demikian pula, buat tiga objek Tombol UI: satu untuk Pilihan 1, satu untuk Pilihan 2, dan satu lagi untuk tombol "Next" (untuk memajukan dialog).
  • Beri nama tombol masing-masing sebagai "Choice1Button," "Choice2Button," dan "NextButton".
  • Posisikan Teks dan Tombol UI pada kanvas sesuai dengan tata letak pilihan Anda. Anda mungkin ingin menempatkan Teks UI di tengah layar dan tombol di bawah kotak teks.
  • Sesuaikan font teks, ukuran, warna, dan properti Teks UI lainnya agar sesuai dengan gaya visual game Anda.
  • Sesuaikan tampilan Tombol UI, seperti mengubah warna dan label teksnya.
  • Di editor Unity, pilih "DialogueManager" GameObject (yang Anda buat untuk melampirkan skrip).
  • Di jendela Inspector, Anda akan melihat komponen skrip "Dialogue Manager". Seret dan lepas ​​objek Teks dan Tombol UI dari jendela Hierarki ke kolom publik terkait di komponen skrip.
  • Dengan menetapkan referensi ini, skrip DialogueManager dapat mengakses Teks dan Tombol UI dalam adegan, memungkinkannya memperbarui konten teks dan mengontrol visibilitasnya sesuai kebutuhan selama dialog.
  • Simpan adegan untuk menyimpan perubahan variabel.

Saat menjalankan game atau berinteraksi dengan pemicu dialog, DialogueManager harus dapat menampilkan teks dialog dan pilihan menggunakan elemen UI yang direferensikan di kanvas.

Kesimpulan

Sistem dialog yang efektif dalam game memberi pemain keagenan, pengaruh, dan rasa keterlibatan dalam dunia virtual, menjadikan pengalaman bermain game lebih kaya dan menarik. Seiring dengan semakin canggihnya narasi game dan penyampaian cerita interaktif, sistem dialog memainkan peran yang semakin penting dalam membentuk perjalanan pemain dan menciptakan pengalaman bermain game yang berkesan.

Artikel yang Disarankan
Pengendali Mobil untuk Persatuan
Pengendali Helikopter untuk Persatuan
Pengendali Pesawat untuk Persatuan
Menerapkan Sistem Parkour di Unity
Cara Membuat Kontrol Derek di Unity
Pengontrol Karakter Cara Menambahkan Kemampuan untuk Mendorong Benda Kaku di Unity
Tutorial Lompat Dinding 3D dan 2D Pemain untuk Unity