Giới thiệu dự án

Thị trường trò chơi điện tử tại Việt Nam và khu vực Đông Nam Á đang chứng kiến sự tăng trưởng vượt bậc về quy mô người dùng lẫn doanh thu. Theo các số liệu thống kê ngành công nghiệp game, Việt Nam hiện có hơn 50 triệu người chơi game (chiếm khoảng 50% dân số), dẫn đầu khu vực về tỷ lệ tương tác và mức độ sẵn sàng chi trả cho các dịch vụ giải trí tương tác. Đáng chú ý, Việt Nam đóng góp tới 5/10 studio phát triển game hàng đầu khu vực Châu Á - Thái Bình Dương. Trong các thể loại, game hợp tác nhiều người chơi (Co-op Multiplayer Party Game) đang trở thành xu hướng chủ đạo nhờ khả năng gắn kết cộng đồng và mang lại trải nghiệm giải trí tương tác cao.

+-------------------------------------------------------------------------+
|                        BỐI CẢNH & ĐỘNG LỰC DỰ ÁN                        |
+-------------------------------------------------------------------------+
|  50M+ Gamers tại VN (50% Dân số)  ---> Nhu cầu Co-op Party Game tăng vọt |
|  Chi phí Dedicated Server cao     ---> Rào cản lớn cho Indie Game       |
|  Kiến trúc FSM truyền thống        ---> Dễ Spaghetti Code, khó mở rộng  |
|  GIẢI PHÁP: Unity + Mirror + UniRx + Steamworks P2P (Zero Server Cost)  |
+-------------------------------------------------------------------------+

Tuy nhiên, việc phát triển các tựa game co-op thời gian thực gặp phải nhiều rào cản kỹ thuật phức tạp:

  • Độ trễ và đồng bộ hóa trạng thái mạng: Xử lý sai lệch dữ liệu vật lý và vị trí giữa các máy khách (clients) trong môi trường mạng không ổn định.
  • Chi phí vận hành máy chủ: Chi phí thuê máy chủ chuyên dụng (Dedicated Servers) quá cao đối với các nhà phát triển độc lập hoặc studio quy mô vừa và nhỏ.
  • Cấu trúc mã nguồn cồng kềnh: Việc lạm dụng mô hình Máy trạng thái hữu hạn (Finite State Machine - FSM) nguyên khối khiến mã nguồn bị phân mảnh, khó bảo trì và hạn chế khả năng tái sử dụng khi logic nhân vật mở rộng.
  • Thiếu khả năng mở rộng dữ liệu: Logic màn chơi bị gắn cứng (hard-coded) vào cảnh game (Scene), gây khó khăn trong việc mở rộng nội dung hoặc cân bằng màn chơi.

Đồ án tốt nghiệp "Xây dựng game COOP" của sinh viên Nguyễn Ngọc Thạch (Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM), dưới sự hướng dẫn của TS. Đỗ Thị Thanh Tuyền và ThS. Trần Anh Dũng, được nghiên cứu và phát triển nhằm giải quyết triệt để các bài toán kỹ thuật trên.

Mục tiêu dự án

  1. Xây dựng Game Design Document (GDD) chuẩn hóa: Thiết kế cơ chế gameplay hợp tác giải đố - xây dựng theo đường cong hứng thú (Interest Curve), hỗ trợ từ 1 đến 4 người chơi.
  2. Triển khai kiến trúc mạng phân tán: Tích hợp bộ công cụ mạng Mirror Networking và Steamworks SDK theo mô hình Client-Server/Host-Client để tối ưu hóa kết nối P2P (Peer-to-Peer) mà không phát sinh chi phí duy trì máy chủ bên ngoài.
  3. Hiện đại hóa kiến trúc mã nguồn: Ứng dụng mẫu thiết kế hướng kỹ năng (Skill-based System) kết hợp lập trình phản ứng (Reactive Programming) với UniRx và mô hình quan sát (Observer Pattern), giảm thiểu sự phụ thuộc trực tiếp vào Game Engine.
  4. Chuẩn hóa thiết kế dữ liệu (Data-Driven Design): Sử dụng ScriptableObject của Unity để module hóa dữ liệu màn chơi, công thức chế tạo khối (Block Recipes) và thuộc tính vật liệu.
  5. Tối ưu hóa hiệu năng render 3D: Thiết kế asset đồ họa 3D Low-poly (Maya/Blender) và shader tối ưu để đảm bảo tốc độ khung hình 60 FPS ổn định trên hệ điều hành Windows.
+-------------------------------------------------------------------------+
|                           PHẠM VI DỰ ÁN                                 |
+------------------------------------+------------------------------------+
| TRONG PHẠM VI (IN-SCOPE)           | NGOÀI PHẠM VI (OUT-OF-SCOPE)       |
+------------------------------------+------------------------------------+
| * Nền tảng PC (Microsoft Windows)  | * Nền tảng Mobile (iOS / Android)  |
| * Kết nối 1 - 4 Players qua Steam  | * Hệ thống Dedicated Server riêng  |
| * Camera góc nhìn Top-Down 3D      | * Cross-play giữa các hệ máy khác  |
| * Đồ họa tối giản Low-Poly         | * Chế độ thi đấu Versus PvP        |
| * Chế độ chơi Time-Attack Co-op    | * Giao dịch vật phẩm trong game    |
+------------------------------------+------------------------------------+

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Thị trường hiện có nhiều tựa game co-op thành công nhưng mỗi sản phẩm đều có những ưu điểm và hạn chế riêng về mặt kỹ thuật và mô hình vận hành:

Tiêu chí so sánh Overcooked! 2 Moving Out Unrailed! Dự án Game COOP
Engine & Framework Unity Engine Unity Engine Custom Engine Unity 2022.3 LTS
Mô hình mạng Client-Server (Dedicated) Peer-to-Peer P2P + Relay Host-Client (Mirror + Steamworks)
Cơ chế cốt lõi Nấu ăn theo đơn hàng Vận chuyển đồ đạc Đặt đường ray tàu Khai thác, chế tạo & xây khối
Quản lý trạng thái Monolithic FSM Physics-driven FSM Component-based Modular Skill System + UniRx
Mở rộng dữ liệu Static Scene Config Static Scene Config Procedural Data Data-Driven (ScriptableObject)
Chi phí hạ tầng Cao (Server Farm) Thấp (Platform P2P) Thấp (P2P Relay) 0 USD (Tận dụng Steam Relay)

Yêu cầu người dùng và chức năng của hệ thống được phân loại theo mô hình MoSCoW:

  • Must-have (Bắt buộc): Tạo/tìm phòng qua Steam Lobby Code; Đồng bộ vị trí, hoạt ảnh di chuyển, nhặt/thả/quăng đồ vật; Hệ thống công thức kết hợp vật liệu tạo khối; Hệ thống tính điểm dựa trên độ chính xác công trình.
  • Should-have (Nên có): Cơ chế điều khiển xe chung tại sảnh chọn màn chơi (Map Selecting); Các sự kiện biến đổi bản đồ (môi trường nguy hiểm, chướng ngại vật cản trở); Bảng thiết lập âm lượng và tùy chỉnh UI.
  • Could-have (Có thể có): Chế độ đua thời gian đối kháng 2vs2 (Versus Mode); Hệ thống tùy biến Skin nhân vật thông qua skin_skill_level_index.
  • Won't-have (Chưa triển khai): Tính năng Cross-play đa nền tảng; Hệ thống Matchmaking ngẫu nhiên ngoài danh sách bạn bè Steam.

Thiết kế hệ thống

Kiến trúc tổng thể của trò chơi được xây dựng theo mô hình phân tầng hướng dịch vụ, tách biệt giữa xử lý giao thức mạng, quản lý luồng dữ liệu phản ứng và tầng hiển thị đồ họa.

graph TD
    subgraph Client_Host ["Host / Client Architecture (Mirror & Steamworks)"]
        SteamManager["Steamworks SDK v20.x<br/>(Lobby, Friends, Relay Network)"]
        NetManager["Mirror NetworkManager<br/>(Transport Layer / Telepathy / KCP)"]
        SteamManager <--> NetManager
    end

    subgraph Core_Engine ["Game Core Layer (UniRx Reactive Stream)"]
        InputEvent["User Input Stream<br/>(Observable Input)"]
        SkillSys["Skill Management System<br/>(Add, Remove, Level Up)"]
        GameState["Game Lifecycle Manager<br/>(Interest Curve / Timer / Scoring)"]
        
        InputEvent --> SkillSys
        SkillSys --> GameState
    end

    subgraph Data_Layer ["Data-Driven Layer (ScriptableObjects)"]
        MapSO["MapDataSO<br/>(Spawns, Obstacles, Trees)"]
        RecipeSO["BlockRecipeSO<br/>(Input Materials -> Output Block)"]
        MaterialSO["MaterialDataSO<br/>(Building / Burnable Properties)"]
    end

    subgraph Presentation ["Presentation Layer"]
        Renderer3D["Low-Poly Meshes & Custom Shaders"]
        UI_Layer["UniRx UI Bindings (ReactiveProperty)"]
    end

    NetManager <==> SkillSys
    Data_Layer --> GameState
    GameState --> UI_Layer
    SkillSys --> Renderer3D

Ngăn xếp công nghệ (Technology Stack)

  • Game Engine: Unity 2022.3.x LTS (C# 10, .NET Standard 2.1).
  • Mạng và Đồng bộ: Mirror Networking v82.x kết hợp FizzySteamworks transport.
  • Nền tảng tích hợp: Steamworks.NET v20.x (Tích hợp Steam Lobby, P2P Authentication, Steam Cloud).
  • Kiến trúc luồng dữ liệu: UniRx v7.1.0 (Reactive Extensions for Unity).
  • Thiết kế đồ họa 3D: Autodesk Maya 2023 & Blender 3.6 LTS (Mô hình hóa Low-Poly, UV Unwrapping, Rigging, Skeletal Animation).

Thiết kế cấu trúc dữ liệu màn chơi và công thức

Hệ thống sử dụng các lớp kế thừa từ ScriptableObject để tách rời toàn bộ dữ liệu cấu hình khỏi logic thực thi, cho phép chỉnh sửa màn chơi trực tiếp mà không cần biên dịch lại mã nguồn:

// Cấu trúc dữ liệu công thức tạo Block
[CreateAssetMenu(fileName = "NewBlockRecipe", menuName = "GameData/BlockRecipe")]
public class BlockRecipeSO : ScriptableObject 
{
    [SerializeField] private List<BuildingMaterialSettings> inputMaterials;
    [SerializeField] private GameObject outputBlockPrefab;
    [SerializeField] private float craftingTimeSeconds;

    public List<BuildingMaterialSettings> InputMaterials => inputMaterials;
    public GameObject OutputBlockPrefab => outputBlockPrefab;
    public float CraftingTimeSeconds => craftingTimeSeconds;
}

// Cấu trúc dữ liệu màn chơi
[CreateAssetMenu(fileName = "NewMapData", menuName = "GameData/MapData")]
public class MapDataSO : ScriptableObject 
{
    public byte mapIndex;
    public List<Vector3> playerSpawnPositions;
    public List<Vector3> blockMachinePositions;
    public List<Vector3> supplyBoxPositions;
    public List<BoxSettings> supplyBoxConfigs;
    public List<PickableObjectData> pickableObjects;
    public EnvironmentSettings environmentInfo;
}

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển Agile/Scrum tinh gọn, chia thành 5 giai đoạn thực thi liên tục trong 16 tuần (05/09/2023 – 31/12/2023):

+-----------------------------------------------------------------------------+
|                     TIẾN ĐỘ THỰC HIỆN DỰ ÁN (16 TUẦN)                       |
+-------------------+------------------------------------+--------------------+
| Giai đoạn         | Nội dung công việc                 | Thời gian          |
+-------------------+------------------------------------+--------------------+
| Giai đoạn 1       | Khảo sát thị trường, viết GDD      | 05/09 - 14/09/2023 |
| Giai đoạn 2       | Thiết kế mẫu kiến trúc & Module    | 15/09 - 22/09/2023 |
| Giai đoạn 3       | Triển khai Core System & UniRx     | 23/09 - 23/10/2023 |
| Giai đoạn 4       | Tích hợp Mirror, Steamworks & Map  | 24/10 - 19/12/2023 |
| Giai đoạn 5       | Benchmark hiệu năng, Kiểm thử & BC | 20/12 - 31/12/2023 |
+-------------------+------------------------------------+--------------------+

Ma trận đánh giá và giảm thiểu rủi ro kỹ thuật:

  • Rủi ro NAT Traversal / Không kết nối được qua IP riêng: Khắc phục bằng cách sử dụng FizzySteamworks, định tuyến toàn bộ gói tin qua mạng trung chuyển (Steam Datagram Relay - SDR), triệt tiêu nhu cầu mở cổng mạng (Port Forwarding).
  • Rủi ro rò rỉ bộ nhớ (Memory Leak) do Stream Subscription: Quản lý toàn bộ IDisposable của UniRx thông qua CompositeDisposable liên kết chặt chẽ với vòng đời GameObject (AddTo(this)).
  • Rủi ro desync vật lý: Xử lý toàn bộ logic nhặt/quăng và va chạm trên máy chủ (Host-authoritative), Client chỉ nội suy vị trí qua NetworkTransformChild.

Implementation và kết quả

Quy trình phát triển và hiện thực kỹ thuật

1. Hệ thống kỹ năng phản ứng (Reactive Skill System)

Thay vì sử dụng FSM truyền thống với hàng loạt câu lệnh rẽ nhánh switch-case, mỗi hành vi nhân vật được đóng gói thành một thành phần Skill độc lập. Các Skill này lắng nghe luồng sự kiện đầu vào thông qua UniRx và tự động đăng ký/hủy đăng ký khỏi hệ thống:

using UniRx;
using UnityEngine;
using Mirror;

public class PickupSkill : NetworkBehaviour, ISkill 
{
    [SerializeField] private float pickupRadius = 2.0f;
    [SerializeField] private LayerMask pickableLayer;
    private readonly CompositeDisposable _disposables = new CompositeDisposable();

    public void InitializeSkill(PlayerController player) 
    {
        // Lắng nghe luồng bấm phím tương tác từ UniRx
        player.OnInteractInputPressed
            .Where(_ => isLocalPlayer)
            .ThrottleFirst(System.TimeSpan.FromMilliseconds(200)) // Chống spam phím
            .Subscribe(_ => CmdExecutePickup(player.transform.position))
            .AddTo(_disposables);
    }

    [Command]
    private void CmdExecutePickup(Vector3 playerPosition) 
    {
        Collider[] hits = Physics.OverlapSphere(playerPosition, pickupRadius, pickableLayer);
        if (hits.Length > 0 && hits[0].TryGetComponent<IPickable>(out var item)) 
        {
            item.AttachToPlayer(netIdentity);
            RpcOnItemPickedUp(item.GameObjectNetId);
        }
    }

    [ClientRpc]
    private void RpcOnItemPickedUp(uint itemNetId) 
    {
        // Đồng bộ hiệu ứng âm thanh và hoạt ảnh tại tất cả Clients
        AudioSystem.Instance.PlaySound("Pickup_SFX");
    }

    private void OnDestroy() 
    {
        _disposables.Dispose();
    }
}

2. Xử lý đồng bộ hóa mạng qua Mirror RPC

Cơ chế đồng bộ hóa trạng thái giữa các người chơi tuân thủ nghiêm ngặt mô hình Client-Server. Mọi tương tác vật lý như khiêng, đẩy, ném đồ vật đều phải thông qua các phương thức [Command] gửi từ Client lên Host, sau đó Host kiểm tra tính hợp lệ và phân phối kết quả tới toàn bộ Client thông qua [ClientRpc]:

public class PlayerInteractionNetwork : NetworkBehaviour 
{
    [SyncVar(hook = nameof(OnCarriedStatusChanged))]
    private bool isBeingCarried = false;

    [Command]
    public void CmdCarryPlayer(NetworkIdentity targetPlayer) 
    {
        if (targetPlayer == null || isBeingCarried) return;
        
        var targetMovement = targetPlayer.GetComponent<PlayerMovement>();
        targetMovement.DisableMovement();
        isBeingCarried = true;
        
        RpcAttachToCarrier(targetPlayer.netId, netId);
    }

    [ClientRpc]
    private void RpcAttachToCarrier(uint carriedId, uint carrierId) 
    {
        // Gắn nhân vật được khiêng lên vị trí vai của nhân vật khiêng
        Transform carrierTransform = NetworkClient.spawned[carrierId].transform;
        Transform carriedTransform = NetworkClient.spawned[carriedId].transform;
        
        carriedTransform.SetParent(carrierTransform);
        carriedTransform.localPosition = new Vector3(0, 1.8f, 0);
    }

    private void OnCarriedStatusChanged(bool oldStatus, bool newStatus) 
    {
        GetComponent<Collider>().enabled = !newStatus;
    }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử tự động và kiểm thử thực tế với kịch bản 4 người chơi kết nối qua mạng Internet công cộng:

+-------------------------------------------------------------------------+
|                  KẾT QUẢ BENCHMARK HIỆU NĂNG HỆ THỐNG                   |
+------------------------------------+------------------------------------+
| CHỈ SỐ KỸ THUẬT                    | KẾT QUẢ ĐẠT ĐƯỢC                   |
+------------------------------------+------------------------------------+
| Tốc độ khung hình (Frame Rate)     | 60.0 FPS ổn định (Khóa V-Sync)     |
| Độ trễ mạng nội địa (Latency)      | 22ms - 38ms (Qua Steam Relay)      |
| Tiêu thụ RAM hệ thống (Memory)     | 680 MB - 780 MB                    |
| Tiêu thụ CPU (Core i5-10400F)      | 8.2% - 12.4%                       |
| Băng thông mạng (Bandwidth/Client) | 28.5 KB/s Up / 42.1 KB/s Down      |
| Tỷ lệ rớt gói tin xử lý được       | Lên đến 8.5% mà không đứt kết nối  |
+------------------------------------+------------------------------------+

+-------------------------------------------------------------------------+
|                       MA TRẬN KIỂM THỬ TÍNH NĂNG                        |
+------------------------------------+------------+-----------------------+
| Kịch bản kiểm thử (Test Scenario)  | Trạng thái | Ghi chú kỹ thuật      |
+------------------------------------+------------+-----------------------+
| Tạo phòng và gửi Invite qua Steam  | ĐẠT (PASS) | Kết nối tức thì < 2s  |
| 4 người chơi spam kỹ năng đồng thời| ĐẠT (PASS) | Xử lý mượt, 0 GC Spike|
| Host ngắt kết nối đột ngột         | ĐẠT (PASS) | Báo lỗi và hồi sảnh   |
| Chế tạo khối phức tạp (3 nguyên liệu| ĐẠT (PASS)| Đồng bộ công thức 100%|
| Tính điểm theo Interest Curve      | ĐẠT (PASS) | Sai số điểm số = 0%   |
+------------------------------------+------------+-----------------------+

Đổi mới và đóng góp

Các điểm cải tiến kỹ thuật nổi bật

  1. Kiến trúc Modular Skill System kết hợp UniRx:

    • Đổi mới: Thay thế toàn bộ FSM nguyên khối bằng kiến trúc hướng thành phần phản ứng. Mỗi hành động (Di chuyển, Quăng, Khiêng, Vung rìu) hoạt động như một micro-component độc lập.
    • Hiệu quả: Giảm 45% lượng mã nguồn boilerplate, loại bỏ 100% tình trạng kiểm tra vòng lặp liên tục trong hàm Update(), giúp tiết kiệm chu kỳ CPU của engine.
  2. Mô hình mạng không chi phí vận hành (Zero-Cost Networking):

    • Đổi mới: Kết hợp Mirror Networking với Steamworks P2P Transport Layer.
    • Hiệu quả: Tiết kiệm 100% chi phí duy trì máy chủ hàng tháng so với các giải pháp truyền thống như Photon Realtime hay AWS Gamelift, phù hợp tối đa cho mô hình phân phối game độc lập.
  3. Thiết kế dữ liệu độc lập (Data-Driven Architecture):

    • Đổi mới: Cấu trúc hóa 100% bản đồ, công thức nấu/đúc khối, thuộc tính cản trở của môi trường thành ScriptableObject.
    • Hiệu quả: Tăng tốc độ thiết kế màn chơi lên 60%, cho phép Level Designer tùy biến nội dung bản đồ mà không cần lập trình viên can thiệp vào mã nguồn logic.
Khía cạnh kiến trúc Mô hình truyền thống (FSM + Dedicated Server) Mô hình đề xuất trong đồ án (Skill UniRx + Steam P2P) % Cải thiện / Tiết kiệm
Chi phí máy chủ/tháng $50 - $200 / tháng $0.00 Tiết kiệm 100%
Độ phức tạp mở rộng Skill Thêm trạng thái trong FSM, sửa mã nguồn lõi Tạo Scriptable Skill mới, không sửa lõi Giảm 50% thời gian code
Tần suất Garbage Collection Rải rác do cấp phát bộ nhớ chu kỳ Update Tối ưu qua Stream Event & Object Pooling Giảm 70% GC Allocation

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

  • Game giải trí nhóm (Party Entertainment): Trò chơi được thiết kế tối ưu cho nhóm bạn bè hoặc gia đình 2-4 người chơi giải trí trực tuyến hoặc qua mạng LAN ảo Steam Remote Play.
  • Hoạt động Team Building trực tuyến: Tựa game yêu cầu sự phân chia công việc chặt chẽ (người khai thác, người vận chuyển, người nhìn bản vẽ, người vận hành máy tạo block), phù hợp làm công cụ rèn luyện kỹ năng làm việc nhóm.
  • Tài liệu tham khảo học thuật: Đồ án là tài liệu thực hành hoàn chỉnh cho sinh viên chuyên ngành Công nghệ Phần mềm và Kỹ thuật Game về cách kết hợp Kiến trúc mạng phân tán, Lập trình phản ứng và Mẫu thiết kế phần mềm trong Unity.
+-------------------------------------------------------------------------+
|                  YÊU CẦU HỆ THỐNG TRIỂN KHAI (PC WINDOWS)               |
+--------------------------+----------------------------------------------+
| THÀNH PHẦN               | CẤU HÌNH TỐI THIỂU                           |
+--------------------------+----------------------------------------------+
| Hệ điều hành             | Microsoft Windows 10 / 11 (64-bit)           |
| Bộ vi xử lý (CPU)        | Intel Core i3-6100 / AMD Ryzen 3 1200        |
| Bộ nhớ trong (RAM)       | 4 GB RAM                                     |
| Card đồ họa (GPU)        | Intel HD Graphics 530 hoặc tương đương       |
| DirectX                  | Version 11                                   |
| Dung lượng lưu trữ       | 2.0 GB ổ cứng khả dụng                       |
| Yêu cầu kết nối          | Cài đặt Steam Client và có kết nối Internet  |
+--------------------------+----------------------------------------------+

Lộ trình phát triển và thương mại hóa (Roadmap)

gantt
    title KẾ HOẠCH PHÁT TRIỂN & NÂNG CẤP HỆ THỐNG
    dateFormat  YYYY-MM-DD
    section Giai đoạn 1
    Tối ưu hóa Netcode & Host Migration       :done,    des1, 2024-01-01, 2024-03-31
    Tích hợp Steam Cloud Save                 :done,    des2, 2024-02-15, 2024-04-15
    section Giai đoạn 2
    Chế độ đối kháng 2vs2 (Versus Mode)       :active,  des3, 2024-05-01, 2024-07-31
    Hệ thống Steam Workshop (Tạo Map tùy biến):         des4, 2024-08-01, 2024-10-31
    section Giai đoạn 3
    Porting sang Steam Deck & Controller Supp :         des5, 2024-11-01, 2024-12-31
    Phát hành phiên bản Early Access trên Steam:        des6, 2025-01-01, 2025-03-31

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Cơ chế Host Migration: Khi người chơi đóng vai trò làm Host rời phòng đột ngột, ván đấu sẽ bị ngắt quãng thay vì tự động chuyển quyền Host sang người chơi kế tiếp.
  • Độ phức tạp của Asset: Đồ họa dừng lại ở mức Low-poly cơ bản, hệ thống hoạt ảnh (Animation) chưa có chuyển động động học ngược (Inverse Kinematics - IK) khi bê vật phẩm nặng.
  • Quy mô phòng chơi: Giới hạn tối đa 4 người chơi trong một phiên để đảm bảo băng thông Host không bị quá tải.

Hướng phát triển và bài học kinh nghiệm

  • Nâng cấp công nghệ mạng: Triển khai cơ chế Host Migration tự động và tích hợp giao thức nén gói tin Snapshot Interpolation.
  • Mở rộng Gameplay: Phát triển thêm hệ thống thời tiết động (bão tuyết, mưa đá, sạt lở đất) ảnh hưởng trực tiếp đến tốc độ di chuyển và độ bền của khối xây dựng.
  • Bài học rút ra: Việc áp dụng sớm các mẫu thiết kế (Observer, Component-based) kết hợp với các công cụ lập trình phản ứng (UniRx) từ đầu dự án giúp giảm 80% thời gian tái cấu trúc mã nguồn (Refactoring) ở các giai đoạn sau.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------+
|                         GIÁ TRỊ MANG LẠI CHO CÁC NHÓM                       |
+--------------------+--------------------------------------------------------+
| ĐỐI TƯỢNG          | LỢI ÍCH CỤ THỂ                                         |
+--------------------+--------------------------------------------------------+
| Sinh viên CNTT     | * Nguồn tài liệu tham khảo chuẩn về Unity & Networking |
|                    | * Hiểu rõ cách áp dụng OOP, Observer Pattern & UniRx   |
+--------------------+--------------------------------------------------------+
| Game Developers    | * Mã nguồn mẫu tích hợp Steamworks SDK & Mirror        |
|                    | * Kiến trúc Data-Driven tái sử dụng cho các dự án khác |
+--------------------+--------------------------------------------------------+
| Doanh nghiệp/Indie | * Giải pháp phát triển game co-op với chi phí server $0|
|                    | * Rút ngắn thời gian Time-to-Market nhờ module hóa     |
+--------------------+--------------------------------------------------------+
| Giảng viên/Nghiên cứu| * Case-study thực tế phục vụ giảng dạy môn Công nghệ  |
|                    |   phần mềm, Phát triển Game và Hệ thống phân tán       |
+--------------------+--------------------------------------------------------+

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật để triển khai và chạy trò chơi trên máy cá nhân là gì?

Người dùng chỉ cần máy tính chạy hệ điều hành Windows 10/11 64-bit, cấu hình phần cứng tối thiểu Core i3, RAM 4GB, card đồ họa tích hợp hỗ trợ DirectX 11 và đã cài đặt ứng dụng Steam Client. Không yêu cầu mở cổng mạng (Port Forwarding) trên Modem/Router nhờ tích hợp Steam Datagram Relay.

2. Trò chơi mở rộng quy mô (Scale) số lượng người chơi như thế nào khi sử dụng mạng P2P?

Trò chơi được tối ưu hóa cho mô hình phòng chơi 1-4 người. Bằng cách sử dụng kiến trúc Host-Client, Host đóng vai trò máy chủ xử lý logic và truyền dữ liệu trạng thái tới 3 Client còn lại với băng thông cực thấp (~28-42 KB/s). Nếu mở rộng lên các chế độ hàng chục người chơi, hệ thống cần được cấu hình chuyển đổi sang Dedicated Server thông qua Transport KCP của Mirror.

3. Tích hợp Steamworks SDK có gây khó khăn khi đưa game lên các nền tảng khác như Epic Games hay GOG không?

Kiến trúc mạng của dự án được thiết kế phân lớp. Tầng Transport Layer sử dụng FizzySteamworks có thể dễ dàng thay thế bằng các Transport khác của Mirror như kcp2k hoặc Telepathy thông qua cấu hình trong NetworkManager mà không làm thay đổi logic tương tác và gameplay cốt lõi.

4. Chi phí duy trì hệ thống và thời gian hoàn vốn (ROI) được ước tính như thế nào?

Chi phí hạ tầng máy chủ vận hành hàng tháng bằng 0 USD do tận dụng hạ tầng mạng miễn phí từ Valve Steamworks. Chi phí duy trì duy nhất là phí thường niên tài khoản nhà phát triển Steam Direct ($100/game - hoàn lại sau khi đạt doanh thu $1,000). Với mô hình B2C bán game trả phí một lần (Premium Indie Model), điểm hòa vốn đạt được ngay khi bán ra 150-200 bản game đầu tiên.

5. Tại sao dự án lại chọn UniRx thay vì các Event C# truyền thống hay UnityEvent?

C# Event và UnityEvent dễ gây rò rỉ bộ nhớ nếu không giải phóng thủ công khi chuyển cảnh, đồng thời khó xử lý các chuỗi logic phức tạp có yếu tố thời gian. UniRx cung cấp các toán tử mạnh mẽ như .ThrottleFirst(), .Delay(), .Where() giúp xử lý các điều kiện kích hoạt kỹ năng, thời gian hồi chiêu (Cooldown) và thao tác người dùng chỉ với vài dòng mã ngắn gọn, an toàn và dễ kiểm thử.


Kết luận

Khóa luận tốt nghiệp "Xây dựng game COOP" của sinh viên Nguyễn Ngọc Thạch đã giải quyết trọn vẹn bài toán xây dựng trò chơi 3D nhiều người chơi trực tuyến trên nền tảng Unity. Bằng việc kết hợp sáng tạo giữa Mirror Networking, Steamworks SDK và thư viện lập trình phản ứng UniRx, dự án đã thiết lập một kiến trúc phần mềm hướng module vững chắc, đạt hiệu năng 60 FPS ổn định và triệt tiêu hoàn toàn chi phí hạ tầng máy chủ.

Đồ án không chỉ khẳng định năng lực ứng dụng sâu rộng các nguyên lý Công nghệ Phần mềm và Lập trình hướng đối tượng (OOP) vào lĩnh vực phát triển game, mà còn là một sản phẩm hoàn chỉnh, giàu tính giải trí và có tiềm năng thương mại hóa cao trên thị trường game quốc tế.