نظام الحوار من أجل الوحدة

نظام الحوار في games ​​عبارة عن آلية تتيح إجراء محادثات تفاعلية وغامرة بين اللاعب والشخصيات داخل عالم اللعبة. إنها بمثابة قناة اتصال يمكن من خلالها للاعبين التفاعل مع شخصيات غير لاعبين (الشخصيات غير القابلة للعب) أو كيانات أخرى، مما يوفر وسيلة لسرد القصص، وتقدم المهمة، وتطوير الشخصية، وبناء العالم.

الهدف الأساسي لنظام الحوار هو إنشاء تجربة ديناميكية وجذابة للاعبين من خلال تمكينهم من الاختيار والتأثير على قصة اللعبة وتشكيل علاقاتهم مع الشخصيات داخل اللعبة. يمكن لنظام الحوار المصمم جيدًا أن يعزز انغماس اللاعب والاستثمار العاطفي وإمكانية إعادة اللعب.

عندما يتعلق الأمر بتطوير الألعاب في Unity، فإن إنشاء نظام حوار كامل من الصفر يمكن أن يكون أمرًا شاملاً للغاية، ولكن من الممكن البدء بمثال مبسط للبدء. سيغطي المثال أدناه نظام الحوار الأساسي القائم على النص باستخدام نظام C# ونظام Unity UI. تذكر أن هذه مجرد نقطة بداية، ويمكن توسيعها وتخصيصها بناءً على الاحتياجات المحددة.

إنشاء مدير الحوار

  • قم بإنشاء سكريبت جديد، وأطلق عليه اسم "DialogueManager"، ثم الصق الكود أدناه داخله:
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;
    }
}

لإعداد كائنات نص واجهة المستخدم والزر في Unity للبرنامج النصي DialogueManager، اتبع الخطوات التالية:

  • في محرر Unity، انقر بزر الماوس الأيمن في نافذة التسلسل الهرمي وحدد "UI -> Text" لإنشاء كائن نص واجهة مستخدم جديد.
  • إعادة تسمية كائن نص واجهة المستخدم إلى "DialogueText."
  • وبالمثل، قم بإنشاء ثلاثة كائنات لأزرار واجهة المستخدم: واحدة للاختيار 1، وواحدة للاختيار 2، وواحدة للزر "Next" (لتقديم الحوار).
  • قم بتسمية الأزرار كـ "Choice1Button," "Choice2Button," و "NextButton" على التوالي.
  • ضع نص واجهة المستخدم والأزرار على اللوحة القماشية وفقًا للتخطيط المفضل لديك. قد ترغب في وضع نص واجهة المستخدم في وسط الشاشة والأزرار الموجودة أسفل مربع النص.
  • اضبط خط النص وحجمه ولونه والخصائص الأخرى لنص واجهة المستخدم ليناسب النمط المرئي للعبتك.
  • تخصيص مظهر أزرار واجهة المستخدم، مثل تغيير ألوانها وتسمياتها النصية.
  • في محرر Unity، حدد "DialogueManager" GameObject (الذي قمت بإنشائه لـ attach البرنامج النصي).
  • في نافذة المفتش، سترى مكون البرنامج النصي "Dialogue Manager". قم بسحب وإسقاط كائنات نص واجهة المستخدم والأزرار من نافذة التسلسل الهرمي إلى الحقول العامة المقابلة في مكون البرنامج النصي.
  • من خلال تعيين هذه المراجع، يمكن للبرنامج النصي DialogueManager الوصول إلى نص واجهة المستخدم والأزرار الموجودة في المشهد، مما يسمح له بتحديث محتوى النص والتحكم في رؤيته حسب الحاجة أثناء الحوار.
  • احفظ المشهد لحفظ التغييرات المتغيرة.

عند تشغيل اللعبة أو التفاعل مع مشغلات الحوار، يجب أن يكون DialogueManager قادرًا على عرض نص الحوار والاختيارات باستخدام عناصر واجهة المستخدم المشار إليها على اللوحة.

خاتمة

يوفر نظام الحوار الفعال في الألعاب للاعبين القوة والتأثير والشعور بالمشاركة في العالم الافتراضي، مما يجعل تجربة الألعاب أكثر ثراءً وجاذبية. نظرًا لأن روايات الألعاب والقصص التفاعلية أصبحت أكثر تطوراً، تلعب أنظمة الحوار دورًا حيويًا بشكل متزايد في تشكيل رحلة اللاعب وإنشاء تجارب ألعاب لا تُنسى.

المقالات المقترحة
تنفيذ نظام الباركور في الوحدة
وحدة التحكم الكوكبية القائمة على الجسم الصلب من أجل الوحدة
كيفية التحكم في الرافعة في الوحدة
إنشاء حركة اللاعب في الوحدة
الوحدة كيفية جعل عناصر التحكم باللمس المحمول
وحدة تحكم السيارة للوحدة
وحدة التحكم في الشخصية كيفية إضافة القدرة على دفع الأجسام الصلبة في الوحدة