Hệ thống Nhiệm vụ Đơn giản

Tags:
Gameplay
Quest
ScriptableObject
Architecture

C# Code

/* --- QuestGoal.cs --- */
[System.Serializable]
public class QuestGoal
{
    public GoalType goalType;
    public int requiredAmount;
    public int currentAmount;

    public bool IsReached() { return (currentAmount >= requiredAmount); }
    public void EnemyKilled() { if (goalType == GoalType.Kill) currentAmount++; }
    public void ItemCollected() { if (goalType == GoalType.Gather) currentAmount++; }
}

public enum GoalType { Kill, Gather }

/* --- Quest.cs (ScriptableObject) --- */
using UnityEngine;

[CreateAssetMenu(fileName = "New Quest", menuName = "Quests/Quest")]
public class Quest : ScriptableObject
{
    public string title;
    public string description;
    public int experienceReward;
    public bool isCompleted;
    public QuestGoal goal;
}

/* --- QuestGiver.cs (Gắn vào NPC) --- */
using UnityEngine;

public class QuestGiver : MonoBehaviour
{
    public Quest quest;
    public PlayerQuest playerQuest;

    public void GiveQuest()
    {
        playerQuest.quest = quest;
        // Mở UI nhiệm vụ và cập nhật thông tin
        Debug.Log("New Quest: " + quest.title);
    }
}

/* --- PlayerQuest.cs (Gắn vào Player) --- */
using UnityEngine;

public class PlayerQuest : MonoBehaviour
{
    public Quest quest;

    public void EnemyKilled()
    {
        if (quest != null && !quest.isCompleted)
        {
            quest.goal.EnemyKilled();
            if (quest.goal.IsReached())
            {
                CompleteQuest();
            }
        }
    }

    void CompleteQuest()
    {
        quest.isCompleted = true;
        // Thưởng cho người chơi
        Debug.Log("Quest '" + quest.title + "' completed!");
        // Xóa quest hoặc đánh dấu đã hoàn thành trong UI
    }
}

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ụ.

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 đơ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.

UI
Gameplay
Interaction
ScriptableObject

Một cấu trúc Finite State Machine (FSM) đơn giản sử dụng enum và switch-case để quản lý các trạng thái khác nhau của AI, như đi tuần, truy đuổi và tấn công.

AI
Architecture
Design Pattern
Gameplay

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

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 ví dụ cơ bản về cách sử dụng Coroutine để thực hiện một hành động sau một khoảng thời gian chờ, mà không làm đóng băng game.

Gameplay
Timer
Coroutine
Architecture

Sử dụng ScriptableObject để tạo các asset dữ liệu có thể tái sử dụng, giúp quản lý cấu hình cho vật phẩm, kẻ địch hoặc các cài đặt game một cách linh hoạt và độc lập với scene.

Data Persistence
Architecture
ScriptableObject
Optimization

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

AI sẽ phát hiện người chơi trong một phạm vi nhất định và bắt đầu di chuyển về phía họ. Khi người chơi ra khỏi phạm vi, AI sẽ dừng lại.

AI
Movement
Gameplay
Player