Hệ thống Dialogue (Hội thoại) cơ bản

Tags:
UI
Gameplay
Interaction
ScriptableObject

C# Code

// 1. ScriptableObject để chứa dữ liệu hội thoại
using UnityEngine;

[CreateAssetMenu(fileName = "New Dialogue", menuName = "Dialogue/Dialogue")]
public class DialogueData : ScriptableObject
{
    public string speakerName;
    [TextArea(3, 10)]
    public string[] sentences;
}

// 2. Script quản lý UI hội thoại
using UnityEngine;
using TMPro;
using System.Collections.Generic;
using System.Collections;

public class DialogueManager : MonoBehaviour
{
    public static DialogueManager Instance;
    public TextMeshProUGUI nameText;
    public TextMeshProUGUI dialogueText;
    public GameObject dialogueBox;

    private Queue<string> sentences;

    void Awake() { Instance = this; }

    void Start()
    {
        sentences = new Queue<string>();
        dialogueBox.SetActive(false);
    }

    public void StartDialogue(DialogueData dialogue)
    {
        dialogueBox.SetActive(true);
        nameText.text = dialogue.speakerName;
        sentences.Clear();

        foreach (string sentence in dialogue.sentences)
        {
            sentences.Enqueue(sentence);
        }
        DisplayNextSentence();
    }

    public void DisplayNextSentence()
    {
        if (sentences.Count == 0)
        {
            EndDialogue();
            return;
        }
        string sentence = sentences.Dequeue();
        StopAllCoroutines();
        StartCoroutine(TypeSentence(sentence));
    }

    IEnumerator TypeSentence(string sentence)
    {
        dialogueText.text = "";
        foreach (char letter in sentence.ToCharArray())
        {
            dialogueText.text += letter;
            yield return new WaitForSeconds(0.02f);
        }
    }

    void EndDialogue()
    {
        dialogueBox.SetActive(false);
        Debug.Log("End of conversation.");
    }
}

// 3. Script để kích hoạt hội thoại (gắn vào NPC hoặc trigger)
using UnityEngine;

public class DialogueTrigger : MonoBehaviour
{
    public DialogueData dialogue;

    public void TriggerDialogue()
    {
        DialogueManager.Instance.StartDialogue(dialogue);
    }

    // Ví dụ: Kích hoạt khi va chạm với Player
    private void OnTriggerEnter(Collider other)
    {
        if(other.CompareTag("Player"))
        {
            TriggerDialogue();
            gameObject.SetActive(false); // Chỉ kích hoạt 1 lần
        }
    }
}

Một hệ thống đơn giản để hiển thị các đoạn hội thoại có nhiều câu và lựa chọn cho người chơi, sử dụng ScriptableObject.

Bình luận (0)

Bạn cần đăng nhập để có thể bình luận.

Chưa có bình luận nào. Hãy là người đầu tiên!

Bài viết liên quan

Một hệ thống kho đồ cơ bản sử dụng ScriptableObject cho dữ liệu vật phẩm và quản lý các ô chứa trong UI.

UI
Gameplay
Inventory
ScriptableObject
Architecture

Một hệ thống linh hoạt cho phép người chơi tương tác với nhiều loại đối tượng (cửa, vật phẩm, NPC, công tắc) chỉ bằng một nút bấm (E) khi ở trong tầm, kèm hiển thị gợi ý trên màn hình.

Interaction
Gameplay
Player
Architecture
Interface
UI

Hiển thị các điểm đánh dấu (marker) cho các mục tiêu trên một thanh la bàn UI, giúp người chơi định hướng.

UI
Gameplay
Navigation

Một cấu trúc cơ bản để tạo, theo dõi và hoàn thành nhiệm vụ, sử dụng ScriptableObject để định nghĩa nhiệm vụ.

Gameplay
Quest
ScriptableObject
Architecture

Quản lý thanh thể lực cho các hành động như chạy nước rút. Thể lực sẽ giảm khi chạy và tự động hồi lại khi đứng yên.

Gameplay
Player
Stamina
UI

Một hệ thống cho phép người chơi tương tác với nhiều loại đối tượng (cửa, NPC, vật phẩm) chỉ bằng một nút bấm khi ở trong tầm.

Gameplay
Interaction
Player
Architecture
Interface

Một script quản lý việc chuyển cảnh trong Unity, bao gồm cả việc tải cảnh bất đồng bộ (asynchronously) với thanh tiến trình (loading bar).

Gameplay
Scene Management
UI

Cho phép người chơi đẩy các vật thể có Rigidbody khi di chuyển vào chúng. Lực đẩy có thể điều chỉnh được.

Physics
Interaction
Player
Gameplay

AI chỉ có thể 'nhìn thấy' và phát hiện người chơi nếu họ nằm trong một hình nón phía trước mặt nó. Hữu ích cho các game stealth.

AI
Gameplay
Stealth

AI sẽ bắn đạn về phía người chơi khi họ ở trong tầm tấn công và có một khoảng thời gian chờ (cooldown) giữa mỗi lần bắn.

AI
Gameplay
Spawning
Physics