Birlik İçin Diyalog Sistemi

games'teki diyalog sistemi, oyuncu ve oyun dünyasındaki karakterler arasında etkileşimli ve sürükleyici konuşmalara izin veren bir mekanizmadır. Oyuncuların oyuncu olmayan karakterlerle (NPC'ler) veya diğer varlıklarla etkileşim kurabileceği bir iletişim kanalı görevi görerek hikaye anlatımı, görev ilerlemesi, karakter gelişimi ve dünya inşası için bir araç sağlar.

Diyalog sisteminin temel amacı, oyuncuların seçim yapmalarını, oyunun anlatımını etkilemelerini ve oyun içi karakterlerle ilişkilerini şekillendirmelerini sağlayarak oyuncular için dinamik ve ilgi çekici bir deneyim yaratmaktır. İyi tasarlanmış bir diyalog sistemi, oyuncunun oyuna dahil olmasını, duygusal yatırımını ve tekrar oynanabilirliğini artırabilir.

Unity'te oyun geliştirme söz konusu olduğunda, sıfırdan tam teşekküllü bir diyalog sistemi oluşturmak oldukça kapsamlı olabilir, ancak başlangıç ​​için basitleştirilmiş bir örnekle başlamak mümkündür. Aşağıdaki örnek, C# ve Unity UI sistemini kullanan temel metin tabanlı diyalog sistemini kapsayacaktır. Bunun yalnızca bir başlangıç ​​noktası olduğunu ve belirli ihtiyaçlara göre genişletilip özelleştirilebileceğini unutmayın.

Diyalog Yöneticisini Oluşturun

  • yeni bir komut dosyası oluşturun, onu "DialogueManager" olarak adlandırın ve içine aşağıdaki kodu yapıştırın:
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;
    }
}

DialogueManager betiği için Unity'da Kullanıcı Arayüzü Metni ve Düğme nesnelerini ayarlamak için aşağıdaki adımları izleyin:

  • Unity düzenleyicisinde, Hiyerarşi penceresine sağ tıklayın ve yeni bir UI Metin nesnesi oluşturmak için "UI -> Text"'yı seçin.
  • UI Metni nesnesini şu şekilde yeniden adlandırın: "DialogueText."
  • Benzer şekilde, üç UI Düğme nesnesi oluşturun: biri Seçim 1 için, biri Seçim 2 için ve biri "Next" düğmesi için (diyaloğu ilerletmek için).
  • Düğmeleri sırasıyla "Choice1Button," "Choice2Button," ve "NextButton" olarak adlandırın.
  • UI Metnini ve Düğmelerini tuval üzerinde tercih ettiğiniz düzene göre konumlandırın. Kullanıcı Arayüzü Metnini ekranın ortasına ve düğmeleri metin kutusunun altına yerleştirmek isteyebilirsiniz.
  • Kullanıcı Arayüzü Metninin metin yazı tipini, boyutunu, rengini ve diğer özelliklerini oyununuzun görsel stiline uyacak şekilde ayarlayın.
  • Renklerini ve metin etiketlerini değiştirmek gibi kullanıcı arayüzü düğmelerinin görünümünü özelleştirin.
  • Unity düzenleyicisinde, "DialogueManager" GameObject'i (komut dosyasını eklemek için oluşturduğunuz) seçin.
  • Denetçi penceresinde "Dialogue Manager" komut dosyası bileşenini göreceksiniz. UI Text ve Button nesnelerini Hiyerarşi penceresinden kod bileşenindeki karşılık gelen ortak alanlara sürükleyip bırakın.
  • DialogueManager betiği, bu referansları atayarak sahnedeki Kullanıcı Arayüzü Metnine ve Düğmelerine erişebilir, böylece metin içeriğini güncelleyebilir ve diyalog sırasında gerektiğinde bunların görünürlüğünü kontrol edebilir.
  • Değişken değişikliklerini kaydetmek için sahneyi kaydedin.

Oyunu çalıştırırken veya diyalog tetikleyicileriyle etkileşimde bulunurken DialogueManager, tuval üzerinde referans verilen kullanıcı arayüzü öğelerini kullanarak diyalog metnini ve seçimleri görüntüleyebilmelidir.

Çözüm

Oyunlardaki etkili bir diyalog sistemi, oyunculara sanal dünyaya katılım, etki ve katılım duygusu sağlayarak oyun deneyimini daha zengin ve daha ilgi çekici hale getirir. Oyun anlatıları ve etkileşimli hikaye anlatımı daha sofistike hale geldikçe diyalog sistemleri, oyuncunun yolculuğunu şekillendirmede ve unutulmaz oyun deneyimleri yaratmada giderek daha hayati bir rol oynuyor.

Önerilen Makaleler
Unity için Helikopter Kontrolörü
Unity için Araç Kontrol Cihazı
Karakter Denetleyicisi Birlik İçinde Sert Cisimleri İtme Yeteneği Nasıl Eklenir
Unity için Uçak Kontrol Cihazı
Unity'de Parkur Sisteminin Uygulanması
Unity için Oyuncu 3D ve 2D Duvardan Atlama Eğitimi
Unity için El Feneri Eğitimi