Giới thiệu dự án

Ngành công nghiệp trò chơi điện tử toàn cầu đang chứng kiến sự tăng trưởng vượt bậc của thể loại bắn súng chiến thuật trực tuyến (Tactical Action/FPS), chiếm hơn 27% tổng doanh thu thị trường game PC thế giới. Người chơi ngày càng yêu cầu cao hơn về tính đồng đội, chiều sâu chiến thuật và trải nghiệm mạng thời gian thực mượt mà. Tuy nhiên, việc phát triển một tựa game hành động trực tuyến đòi hỏi giải quyết bài toán phức tạp về kiến trúc mạng, quản lý đồng bộ trạng thái thực và lưu trữ dữ liệu người chơi bảo mật.

Đồ án tốt nghiệp đại học ngành Kỹ thuật Tin học & Máy tính (Informatics and Computer Engineering) của tác giả Nguyễn Bảo Quang, dưới sự hướng dẫn của TS. Nguyễn Đăng Khoa tại Trường Quốc tế – Đại học Quốc gia Hà Nội (VNU-IS), giải quyết trực tiếp các thách thức cốt lõi này thông qua việc xây dựng hoàn chỉnh một tựa game hành động chiến thuật trực tuyến trên nền tảng Unity Engine kết hợp C#.

Mục tiêu dự án

  1. Làm chủ kiến trúc hướng thành phần (Component-based Architecture): Ứng dụng triệt để mô hình GameObject - Component, Prefab và Animator Controller trong Unity để xây dựng hệ thống gameplay module hóa.
  2. Hiện thực hóa cơ chế mạng đa người chơi thời gian thực: Tích hợp Photon Unity Networking (PUN 2) để xử lý matchmaking, quản lý phòng chơi (Room Management), đồng bộ hóa chuyển động và cơ chế gọi hàm từ xa (Remote Procedure Calls - RPC).
  3. Xây dựng hệ thống Backend lưu trữ đám mây: Tích hợp Microsoft PlayFab nhằm xác thực tài khoản (Authentication), lưu trữ dữ liệu nhân vật, quản lý kho đồ (Inventory) và tùy biến trang bị (Customization System).
  4. Phát triển cơ chế chiến đấu chiến thuật chuẩn xác: Xây dựng hệ thống ngắm bắn qua đầu ruồi (Aim Down Sight - ADS), xử lý đường đạn bằng kỹ thuật Raycast và tính toán sát thương thời gian thực.
  5. Đánh giá và tối ưu hóa hiệu năng: Xây dựng bộ kịch bản kiểm thử (Test Cases), đo lường độ trễ mạng (RTT latency) và đảm bảo tốc độ khung hình ổn định từ 60 FPS trở lên trên hệ thống PC tiêu chuẩn.

Phương pháp tiếp cận và Phạm vi

Dự án áp dụng mô hình kiến trúc Client-Server lai (Hybrid Client-Server) thông qua Photon Cloud và PlayFab BaaS (Backend-as-a-Service). Hệ thống tập trung vào nền tảng PC (Windows x64), hỗ trợ phòng đấu đối kháng trực tuyến từ 2 đến 8 người chơi cùng hệ thống cửa hàng trang bị tương tác trực tiếp với cơ sở dữ liệu đám mây.


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

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

Trong phát triển game nhiều người chơi, việc lựa chọn kiến trúc mạng và backend đóng vai trò quyết định đến độ ổn định và chi phí vận hành.

Tiêu chí Unity + Photon PUN + PlayFab (Đồ án chọn) Unreal Engine 5 + Dedicated Server Godot 4 + Nakama
Độ phức tạp hạ tầng Thấp (Sử dụng Cloud Relay & Managed BaaS) Rất cao (Cần cụm máy chủ chuyên dụng riêng) Trung bình (Tự host Docker server)
Tốc độ đóng gói & MVP Cực nhanh nhờ SDK tích hợp sẵn Chậm, tốn tài nguyên biên dịch C++ Khá nhanh
Chi phí vận hành ban đầu Miễn phí/Chi phí thấp theo CCU thực tế Rất cao (chi phí duy trì Server VPS 24/7) Phụ thuộc chi phí hosting máy chủ
Khả năng đồng bộ hóa Tối ưu tốt cho phòng chơi 2 - 16 người qua UDP Rất mạnh cho thế giới mở/server 64+ người Tốt cho game 2D/3D quy mô nhỏ

Hệ thống yêu cầu đáp ứng mô hình MoSCoW:

  • Must-have: Xác thực tài khoản PlayFab, đồng bộ vị trí/góc nhìn người chơi qua Photon PUN, bắn súng Raycast, trừ máu (Health/Damage) và đồng bộ trạng thái sinh/tử.
  • Should-have: Cơ chế ADS (Aim Down Sight), cửa hàng vũ khí (Gun Shop), tùy biến phụ kiện nhân vật (Spartan suit customization).
  • Could-have: Bảng xếp hạng trực tuyến (Leaderboard), nhiều chế độ chơi (Defuse Bomb, Capture Points).
  • Won't-have (giai đoạn này): Hệ thống Dedicated Server vật lý độc lập, chống hack cấp độ Kernel.

Thiết kế hệ thống

Kiến trúc tổng thể của trò chơi được phân tầng rõ ràng giữa Client Logic, Network Relay Layer và Persistent Backend:

flowchart TD
    subgraph Client["Unity Game Client (C#)"]
        UI["UI / Canvas Manager"]
        PlayerCtrl["Player Controller (Movement & MouseLook)"]
        WeaponSys["Weapon System (Raycast & ADS)"]
        NetManager["Network & Room Manager"]
    end

    subgraph PhotonCloud["Photon PUN 2 Cloud Relay"]
        PhotonMatch["Matchmaking & Room Lobby"]
        PhotonSync["State Synchronization (Transform / Animation)"]
        PhotonRPC["RPC Event Dispatcher (Damage / Bullet Impact)"]
    end

    subgraph PlayFabBaaS["Microsoft PlayFab BaaS"]
        AuthService["User Authentication (Login / Signup)"]
        UserData["Player Title Data & Inventory"]
        VirtualEconomy["Gun Store & Catalog DB"]
    end

    UI --> AuthService
    PlayerCtrl --> PhotonSync
    WeaponSys --> PhotonRPC
    NetManager --> PhotonMatch
    AuthService --> UserData
    WeaponSys --> VirtualEconomy

Thông số kỹ thuật (Technology Stack)

  • Game Engine: Unity Engine version 2022.3 LTS (C# 9.0, .NET Standard 2.1).
  • Multiplayer SDK: Photon Unity Networking (PUN 2 v2.41) – giao thức UDP, serialization qua Photon Stream.
  • Backend Services: Microsoft PlayFab SDK v2.15x – RESTful API qua HTTPS, cấu trúc dữ liệu JSON.
  • IDE: Microsoft Visual Studio 2022 Community.

Cấu trúc Dữ liệu Người chơi (PlayFab JSON Schema)

{
  "CharacterCustomization": {
    "SuitModel": "Spartan_V1",
    "HelmetAddon": true,
    "VisorColor": "Metallic_Gold"
  },
  "Inventory": {
    "PrimaryWeapon": "Heavy_Sniper_Rifle",
    "SecondaryWeapon": "Tactical_Pistol",
    "Credits": 2500
  },
  "Statistics": {
    "Kills": 142,
    "Deaths": 89,
    "MatchesWon": 18
  }
}

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

Dự án áp dụng mô hình Agile/Scrum rút gọn với chu kỳ 2 tuần/sprint:

  • Sprint 1 - 2: Thiết lập môi trường Unity, tích hợp PlayFab API, hoàn thiện chức năng Login/Signup UI.
  • Sprint 3 - 4: Xây dựng cơ chế di chuyển vật lý (Character Controller, MouseLook), camera góc nhìn thứ nhất (FPS Camera) và hệ thống animation súng (Heavy Sniper Animator).
  • Sprint 5 - 6: Tích hợp Photon PUN 2, viết kịch bản Room Manager, Instantiate nhân vật qua mạng và đồng bộ hóa biến đổi (Transform Serialization).
  • Sprint 7 - 8: Hiện thực hóa Raycast Shooting, xử lý sát thương qua RPC, đồng bộ giáp/máu và hoàn thiện Gun Shop.

Implementation và kết quả

Chi tiết quá trình phát triển và thuật toán cốt lõi

1. Cơ chế Bắn súng Raycast và Đồng bộ Sát thương từ xa

Hệ thống sử dụng kỹ thuật Hitscan thông qua tia Physics.Raycast từ tâm màn hình camera (ViewportPointToRay), kết hợp với gọi hàm từ xa [PunRPC] để trừ máu người chơi mục tiêu mà không gây nghẽn đường truyền vật lý.

using UnityEngine;
using Photon.Pun;

public class GunShooting : MonoBehaviourPunCallbacks
{
    [SerializeField] private Camera fpsCamera;
    [SerializeField] private float weaponDamage = 45f;
    [SerializeField] private float weaponRange = 250f;
    [SerializeField] private LayerMask hitMask;
    [SerializeField] private ParticleSystem muzzleFlash;

    public void Fire()
    {
        if (!photonView.IsMine) return;

        muzzleFlash.Play();
        Ray ray = fpsCamera.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0));
        
        if (Physics.Raycast(ray, out RaycastHit hitInfo, weaponRange, hitMask))
        {
            PhotonView targetPhotonView = hitInfo.collider.GetComponent<PhotonView>();
            if (targetPhotonView != null && !targetPhotonView.IsMine)
            {
                targetPhotonView.RPC("TakeDamageRPC", RpcTarget.AllBuffered, weaponDamage);
            }
        }
    }
}

2. Đồng bộ hóa vị trí và góc quay (Interpolation Lag Compensation)

Để tránh hiện tượng dịch chuyển giật cục (teleport/jitter) do mất gói tin UDP, dữ liệu vị trí và góc quay được gửi tuần tự hóa thông qua IPunObservable và nội suy mượt bằng hàm Vector3.Lerp:

using UnityEngine;
using Photon.Pun;

public class PlayerNetworkSync : MonoBehaviourPunCallbacks, IPunObservable
{
    private Vector3 networkPosition;
    private Quaternion networkRotation;
    private const float InterpolationSpeed = 12.0f;

    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.IsWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
        }
        else
        {
            networkPosition = (Vector3)stream.ReceiveNext();
            networkRotation = (Quaternion)stream.ReceiveNext();
        }
    }

    private void Update()
    {
        if (!photonView.IsMine)
        {
            transform.position = Vector3.Lerp(transform.position, networkPosition, Time.deltaTime * InterpolationSpeed);
            transform.rotation = Quaternion.Lerp(transform.rotation, networkRotation, Time.deltaTime * InterpolationSpeed);
        }
    }
}

3. Xác thực người chơi qua Microsoft PlayFab SDK

Đảm bảo an toàn thông tin đăng nhập và tải dữ liệu trang bị của nhân vật ngay khi vào sảnh chờ:

using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;

public class PlayFabAuthManager : MonoBehaviour
{
    public void LoginUser(string username, string password)
    {
        var request = new LoginWithPlayFabRequest
        {
            Username = username,
            Password = password
        };

        PlayFabClientAPI.LoginWithPlayFab(request, 
            result => {
                Debug.Log($"PlayFab Login Success! PlayFabID: {result.PlayFabId}");
                LoadPlayerInventoryData();
            },
            error => {
                Debug.LogError($"Login Failed: {error.GenerateErrorReport()}");
            });
    }

    private void LoadPlayerInventoryData()
    {
        PlayFabClientAPI.GetUserData(new GetUserDataRequest(),
            result => {
                if (result.Data != null && result.Data.ContainsKey("SuitModel"))
                {
                    string suit = result.Data["SuitModel"].Value;
                    Debug.Log($"Equipped Suit: {suit}");
                }
            },
            error => Debug.LogError(error.GenerateErrorReport()));
    }
}

Kiểm thử và đánh giá (Testing & Validation)

Dự án đã thiết lập 24 test case chính thức bao phủ toàn bộ các phân hệ chức năng:

Mã Test Case Phân hệ kiểm thử Kịch bản thực hiện Kết quả kỳ vọng Trạng thái thực tế
TC-01 PlayFab Auth Đăng ký tài khoản mới với định dạng chuẩn Tạo record trên PlayFab Title DB PASS (100%)
TC-02 PlayFab Auth Đăng nhập tài khoản sai mật khẩu Báo lỗi UI, chặn truy cập vào Sảnh PASS (100%)
TC-03 Photon PUN 2 client cùng bấm kết nối vào Room Cùng gia nhập 1 Room ID, spawn 2 nhân vật PASS (100%)
TC-04 Gameplay Sync Client 1 di chuyển và xoay chuột Client 2 nhìn thấy chuyển động mượt PASS (Lerp mượt)
TC-05 Combat System Bắn trúng hitbox đối thủ bằng Raycast Client mục tiêu giảm đúng 45 HP qua RPC PASS (100%)
TC-06 Customization Bật/Tắt phụ kiện kính bảo hộ (Glass Add-on) Lưu trữ giá trị true/false lên Cloud PASS (100%)

Kết quả Benchmark Hiệu năng Hệ thống:

  • Tốc độ khung hình (Frame Rate): 75 - 110 FPS trên độ phân giải Full HD (1920x1080) với GPU Nvidia GTX 1050 Ti.
  • Độ trễ truyền tải mạng (Ping/Latency): Trung bình 28ms - 45ms khi kết nối tới Photon Region asia (Singapore).
  • Tỷ lệ đồng bộ gói tin: Đạt 99.2% gói tin đồng bộ thành công ở tần số 30Hz tick rate.
  • Tài nguyên bộ nhớ (RAM Allocation): Tiêu thụ trung bình 820 MB RAM trong màn chơi multiplayer.

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

  1. Tích hợp Kiến trúc Hybrid Cloud Không Máy chủ (Serverless Game Backend): Đồ án kết hợp nhuần nhuyễn giữa giải pháp mạng chuyển tiếp tốc độ cao Photon PUN 2 và nền tảng BaaS PlayFab. Điều này giảm thiểu 100% chi phí duy trì phần cứng máy chủ chuyên dụng trong giai đoạn thử nghiệm ban đầu.
  2. Module hóa Hệ thống Trang bị và Tùy biến Nhân vật: Xây dựng cơ chế tải động prefab phụ kiện dựa trên dữ liệu Title Data từ đám mây, giúp tối ưu hóa dung lượng build client.
  3. Thuật toán Nội suy Giảm thiểu Lag (Interpolation Lag Smoothing): Ứng dụng công thức nội suy Vector3.Lerp kết hợp tham số hiệu chỉnh delta-time, giảm thiểu hiện tượng trôi vị trí (rubber-banding) khi kết nối mạng dao động tới 150ms.
  4. Tài liệu Kỹ thuật mang Tính Ứng dụng Thực tiễn Cao: Đồ án đóng vai trò như một cẩm nang kiến trúc hoàn chỉnh cho sinh viên ngành Công nghệ Thông tin/Kỹ thuật Máy tính trong việc phát triển game mạng 3D bằng C# và Unity.

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

Khả năng ứng dụng thực tế

  • Phát hành game độc lập (Indie Game): Mô hình kiến trúc sẵn sàng đóng gói và mở rộng để phát hành trên các nền tảng phân phối như Steam hoặc Epic Games Store.
  • Mô phỏng huấn luyện tương tác (Interactive Military/Tactical Training): Có thể tái sử dụng cơ chế di chuyển, ngắm bắn ADS và mạng đa người chơi để xây dựng các mô hình huấn luyện mô phỏng chiến thuật cho lực lượng an ninh hoặc cứu nạn.

Yêu cầu hệ thống và Triển khai

  • Cấu hình phần cứng tối thiểu (Client Minimum Specs):
    • OS: Windows 10/11 64-bit.
    • CPU: Intel Core i3-6100 / AMD Ryzen 3 1200.
    • RAM: 4 GB.
    • GPU: DirectX 11 tương thích (Intel HD 530 hoặc rời).
    • Dung lượng ổ cứng: 1.5 GB khả dụng.
  • Quy trình triển khai:
    1. Cấu hình PhotonServerSettings với AppID lấy từ Photon Engine Dashboard.
    2. Điền TitleId dự án trong cấu hình PlayFabSharedSettings.
    3. Đóng gói bản build bằng Unity Build Settings (Target Platform: Windows, Architecture: x86_64).

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

Hạn chế hiện tại

  • Phiên bản thử nghiệm Beta: Đôi khi gặp hiện tượng gián đoạn khi kết nối vào phòng nếu đường truyền mạng người dùng chặn cổng UDP.
  • Tính toán phía Client (Client-Side Hit Detection): Cơ chế Raycast bắn trúng thực hiện từ Client rồi gửi RPC có nguy cơ bị gian lận (cheat/hack) nếu người chơi can thiệp vào bộ nhớ máy khách.
  • Chế độ chơi còn hạn chế: Chưa tích hợp hệ thống AI Bot hỗ trợ người chơi luyện tập khi thiếu bạn chơi.

Hướng phát triển trong tương lai

  • Nâng cấp kiến trúc Server-Authoritative: Chuyển đổi sang Photon Fusion hoặc Dedicated Server trên Azure PlayFab Multi-player Servers (MPS) để máy chủ trực tiếp xác thực đường đạn và vị trí người chơi.
  • Phát triển thuật toán Chống gian lận (Anti-cheat): Tích hợp kiểm tra vận tốc di chuyển và giới hạn góc quay bất thường ở phía server logic.
  • Mở rộng tính năng: Bổ sung hệ thống Voice Chat thời gian thực qua Photon Voice và hệ thống nhiệm vụ thời gian thực (LiveOps Events).

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

  • Sinh viên & Học viên CNTT: Nguồn tài liệu mẫu chi tiết về cách cấu hình hệ thống mạng nhiều người chơi trong Unity bằng ngôn ngữ C#.
  • Lập trình viên Game Độc lập (Indie Developers): Nắm vững quy trình kết nối backend đám mây (PlayFab) với chi phí 0 đồng trong giai đoạn khởi nghiệp ban đầu.
  • Doanh nghiệp vừa và nhỏ: Tiếp cận mô hình kiến trúc phát triển ứng dụng tương tác 3D thời gian thực với chi phí tối ưu và thời gian phát triển ngắn.
  • Các nhà nghiên cứu giáo dục: Cung cấp case study thực nghiệm về độ trễ, lưu lượng mạng và hiệu năng đồ họa trong môi trường mô phỏng phân tán.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy bản dựng game là gì?
Game yêu cầu máy tính chạy hệ điều hành Windows 10/11 64-bit, tối thiểu 4GB RAM, card đồ họa hỗ trợ DirectX 11 và kết nối Internet ổn định có mở các cổng truyền dữ liệu UDP của Photon Cloud.

2. Giới hạn số lượng người chơi đồng thời (CCU) của kiến trúc này là bao nhiêu?
Gói miễn phí của Photon Cloud hỗ trợ tối đa 20 CCU (người chơi cùng lúc). Khi nâng cấp gói thương mại, kiến trúc này có thể mở rộng linh hoạt lên hàng chục nghìn CCU mà không cần thay đổi mã nguồn logic mạng ở phía Client.

3. Tại sao dự án lại kết hợp cả Photon PUN và Microsoft PlayFab thay vì chỉ dùng một nền tảng?
Photon PUN chuyên trách xử lý kết nối mạng thời gian thực với độ trễ siêu thấp (truyền tải vị trí, bắn súng, animation qua UDP). Trong khi đó, PlayFab đảm nhận vai trò backend lưu trữ dữ liệu vĩnh viễn (tài khoản, vật phẩm, tiền ảo, lịch sử trận đấu qua HTTPS API), tạo nên một giải pháp toàn diện và chuyên biệt hóa.

4. Cơ chế bắn súng bằng Raycast có ưu điểm gì so với việc phóng đạn vật lý (Rigidbody Projectile)?
Raycast (Hitscan) kiểm tra va chạm tức thì theo đường thẳng quang học ngay tại khung hình bắn, tiết kiệm tài nguyên CPU và loại bỏ độ trễ tính toán quỹ đạo đạn trên môi trường mạng, rất phù hợp cho các vũ khí như súng trường hoặc súng bắn tỉa (Sniper).

5. Chi phí vận hành và thời gian thu hồi vốn (ROI) của dự án này như thế nào?
Trong giai đoạn thử nghiệm (dưới 100.000 người dùng đăng ký và 20 CCU), chi phí máy chủ backend là 0 VNĐ. Khi mở rộng thương mại hóa với mô hình bán trang bị (In-App Purchases qua PlayFab Economy), điểm hòa vốn có thể đạt được nhanh chóng trong vòng 3 - 6 tháng nhờ chi phí hạ tầng Serverless cực thấp.


Kết luận

Đồ án tốt nghiệp "Xây Dựng Trò Chơi Hành Động Chiến Thuật Trực Tuyến Bằng Unity và C#" của tác giả Nguyễn Bảo Quang đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng kỹ thuật đặt ra. Dự án không chỉ chứng minh tính khả thi cao trong việc kết hợp Unity Engine, Photon Unity Networking và Microsoft PlayFab để phát triển trò chơi nhiều người chơi hoàn chỉnh, mà còn cung cấp cơ sở dữ liệu thực nghiệm giá trị về tối ưu hóa mạng và hiệu năng đồ họa.

Đây là minh chứng tiêu biểu cho năng lực ứng dụng kiến thức kỹ thuật phần mềm vào giải quyết các bài toán công nghệ giải trí tương tác phức tạp, mở ra nền tảng vững chắc cho việc phát triển các sản phẩm game thương mại quy mô lớn trong tương lai.