Giới thiệu dự án
Thị trường trò chơi điện tử toàn cầu đang chứng kiến sự tăng trưởng vượt bậc về quy mô và doanh thu. Theo báo cáo từ tổ chức nghiên cứu thị trường Newzoo, quy mô ngành game toàn cầu năm 2022 đã đạt 182,9 tỷ USD với gần 3,2 tỷ người chơi, và tiếp tục tăng trưởng lên mức 187,7 tỷ USD vào năm 2023. Riêng tại Việt Nam, số liệu thống kê ghi nhận doanh thu ngành game cán mốc 500 triệu USD, giữ vị trí thứ 5 trong khu vực Đông Nam Á. Mặc dù sở hữu tiềm năng thị trường và lượng người dùng khổng lồ, phần lớn thị phần trong nước vẫn bị chiếm lĩnh bởi các tựa game nước ngoài (như League of Legends, Genshin Impact). Các studio phát triển game độc lập (Indie Studios) và lập trình viên tại Việt Nam đối mặt với rào cản kỹ thuật rất lớn trong việc xây dựng các tựa game nhiều người chơi (Multiplayer Game) có kiến trúc mạng ổn định, đồng bộ thời gian thực chuẩn xác và chi phí hạ tầng tối ưu.
TOÀN CẦU 2023: $187.7 TỶ USD
[================================================]
Mobile Games: $92.6 Tỷ (49.3%) | PC/Console: $95.1 Tỷ (50.7%)
VIỆT NAM 2023: $500 TRIỆU USD
[========] (Top 5 Đông Nam Á - Tiềm năng phát triển lớn)
Vấn đề cốt lõi mà các nhà phát triển game độc lập gặp phải bao gồm: độ phức tạp cao trong việc quản lý trạng thái máy chủ - máy trạm (Server-Authoritative vs Client-Authoritative), xử lý độ trễ mạng (Network Latency), chi phí duy trì Dedicated Server đắt đỏ, và rào cản triển khai hệ thống ghép trận (Matchmaking/Lobby).
Đồ án khóa luận tốt nghiệp ngành Công nghệ Phần mềm tại Trường Đại học Công nghệ Thông tin - ĐHQG TP.HCM với đề tài "Xây dựng trò chơi trực tuyến nhiều người chơi bằng công nghệ Unity3D" (Thực hiện: Nguyễn Duy Minh Tuấn; GVHD: Th.S Đinh Nguyễn Anh Dũng) được thực hiện nhằm giải quyết trực tiếp bài toán này.
Các mục tiêu cụ thể của dự án bao gồm:
- Nghiên cứu sâu cơ chế hoạt động, vòng đời thực thi và kiến trúc mạng của Unity Engine kết hợp giải pháp Netcode for GameObjects (NGO).
- Tích hợp dịch vụ điện toán đám mây Unity Lobby Service nhằm xây dựng hệ thống phòng chờ, tìm kiếm và ghép trận linh hoạt mà không cần duy trì cụm máy chủ trung tâm tốn kém.
- Hiện thực hóa kiến trúc Client-Host tối ưu hóa băng thông, đồng bộ chuyển động nhân vật, trạng thái chiến đấu và cơ chế sát thương thời gian thực.
- Xây dựng hoàn chỉnh một tựa game 3D góc nhìn thứ ba (Third-Person View) với 3 chế độ chơi riêng biệt: Giải đố (Co-op Puzzle), Đấu đơn (PvP Deathmatch) và Sinh tồn (PvP Survival).
Giải pháp kỹ thuật được lựa chọn là mô hình mạng kết hợp: Quản lý phiên và phát hiện phòng thông qua Unity Lobby Service trên nền tảng đám mây, kết hợp xử lý logic mô phỏng trận đấu theo kiến trúc Client-Host trên mạng cục bộ (LAN) hoặc P2P. Cách tiếp cận này giúp cắt giảm 100% chi phí vận hành máy chủ chuyên dụng trong giai đoạn thử nghiệm, giảm thiểu độ trễ xử lý (Round-Trip Time - RTT < 30ms trong môi trường nội bộ) và đảm bảo tính khả thi cao cho các đội ngũ phát triển tinh gọn.
Phạm vi giới hạn của đồ án tập trung vào môi trường desktop hệ điều hành Windows 10/11 x64, điều khiển nhân vật góc nhìn thứ ba và tương tác qua giao thức mạng nội bộ với hạ tầng matchmaking dựa trên nền tảng Unity Gaming Services.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Quá trình phát triển game multiplayer đòi hỏi việc lựa chọn framework mạng (Networking Framework) phù hợp với quy mô dự án, chi phí và khả năng kiểm soát mã nguồn.
| Tiêu chí so sánh |
Unity Netcode for GameObjects (NGO) |
Photon Fusion / PUN2 |
Mirror Networking |
Custom Sockets (C# TCP/UDP) |
| Mô hình kiến trúc |
Client-Host / Dedicated Server |
Client-Server Cloud Relay |
Client-Host / Dedicated |
Đa dạng / Tùy biến hoàn toàn |
| Chi phí hạ tầng |
Miễn phí (tích hợp sâu UGS) |
Trả phí theo CCU (Concurrent Users) |
Miễn phí (Mã nguồn mở) |
Chi phí tự thuê VPS/Dedicated Server |
| Độ phức tạp tích hợp |
Thấp - Tích hợp gốc GameObject |
Trung bình - SDK riêng biệt |
Trung bình - Kế thừa UNet cũ |
Cực kỳ cao - Tự viết Serialization |
| Khả năng đồng bộ |
NetworkVariable, RPCs tự động |
Data-driven Tick-based |
SyncVar, Command/RPC |
Thủ công qua Byte Stream |
| Độ trễ trung bình |
Thấp (15-30ms LAN / 40-70ms WAN) |
Rất thấp (Server Photon Cloud) |
Thấp (Tùy thuộc Host máy trạm) |
Tùy biến theo giao thức |
Phân tích yêu cầu hệ thống theo mô hình MoSCoW
- Must-Have (Bắt buộc có): Hệ thống tạo/duyệt/gia nhập phòng (Lobby Browser); đồng bộ hóa chuyển động nhân vật (Transform); xử lý tấn công cận chiến và truyền nhận sát thương; quản lý vòng đời nhân vật (Sống, Chết, Hồi sinh); logic phân định thắng thua.
- Should-Have (Nên có): Chế độ quan sát (Spectator Mode) khi hết lượt hồi sinh; đồng bộ thanh máu (Health Bar UI) theo thời gian thực; cơ chế chuyển quyền chủ phòng (Host Migration fallback).
- Could-Have (Có thể mở rộng): Tích hợp Unity Relay để kết nối xuyên mạng NAT/Firewall không cần mở port; hệ thống nhặt nhiều loại vũ khí khác nhau.
- Won't-Have (Chưa triển khai): Hệ thống lưu trữ cơ sở dữ liệu tài khoản tập trung (User Auth DB); bảng xếp hạng toàn cầu (Global Leaderboards); hệ thống chống gian lận cấp kernel (Anti-cheat).
Thiết kế hệ thống
Kiến trúc hệ thống được phân tầng rõ rệt giữa dịch vụ quản lý phiên ngoại tuyến (Out-game Lobby Service) và mô phỏng logic trận đấu thời gian thực (In-game Client-Host Logic).
graph TD
subgraph "Unity Gaming Services (Cloud)"
LobbyCloud["Unity Lobby Service<br/>(Quản lý Metadata, Danh sách phòng, Join Code)"]
end
subgraph "Host Machine (Player 1)"
HostApp["Unity Game Client (Host)"]
NetMgrHost["NetworkManager (Server Mode)"]
HostLogic["Server-Authoritative Game Logic<br/>(Máu, Điểm, Va chạm, Trạng thái)"]
HostNetObj["NetworkObjects (Host Instances)"]
end
subgraph "Client Machine (Player 2..N)"
ClientApp["Unity Game Client"]
NetMgrClient["NetworkManager (Client Mode)"]
ClientPredict["Client-Side Movement Prediction"]
ClientNetObj["NetworkObjects (Replicated Replicas)"]
end
HostApp <-->|HTTP REST / WebSockets| LobbyCloud
ClientApp <-->|HTTP REST / WebSockets| LobbyCloud
NetMgrHost <==>|"Unity Transport (UDP Messaging / RPCs / NetworkVariable)"| NetMgrClient
HostLogic --> HostNetObj
HostNetObj -.->|"Đồng bộ tự động"| ClientNetObj
ClientPredict --> NetMgrClient
Ngăn xếp công nghệ (Technology Stack)
- Game Engine: Unity Editor v2022.3.x LTS (Cung cấp runtime ổn định và tối ưu hóa đa nền tảng).
- Ngôn ngữ lập trình: C# (.NET Standard 2.1).
- Networking Library: Unity Netcode for GameObjects v1.5.2+.
- Transport Layer: Unity Transport Package (UTP) v2.0.0 (Sử dụng giao thức UDP hỗ trợ xử lý gói tin tin cậy và không tin cậy).
- Matchmaking & Discovery: Unity Lobby Service SDK v1.1.2.
- Môi trường triển khai: Windows 10/11 x64.
Cấu trúc dữ liệu phòng chơi (Lobby Data Schema)
Dữ liệu phiên phòng được đồng bộ hóa dưới định dạng khóa-giá trị (Key-Value metadata):
LobbyId: Chuỗi định danh GUID duy nhất do hệ thống UGS cấp phát.
LobbyName: Tên hiển thị phòng chơi do Host đặt (kiểu string).
MaxPlayers: Số lượng người chơi tối đa (mặc định: 2 - 8 người).
IsPrivate: Trạng thái phòng công khai hay sử dụng mã riêng tư (boolean).
GameModeData: Metadata lưu trữ chế độ chơi ("Puzzle", "Deathmatch", "Survival").
RelayIPv4Address: Địa chỉ IP nội bộ của Host phục vụ quá trình kết nối trực tiếp.
Mô hình an toàn dữ liệu và tối ưu hiệu năng
- Nguyên lý Thẩm quyền Máy chủ (Server-Authoritative Model): Mọi logic trừ máu, tính toán sát thương vũ khí, trừ mạng và phán quyết thắng thua đều do Host tính toán độc quyền. Client chỉ gửi yêu cầu hành vi (User Intent) qua ServerRpc.
- Tối ưu băng thông: Sử dụng
NetworkVariable<T> với cơ chế ghi nhận thay đổi (Dirty Flag). Dữ liệu chỉ được đóng gói gửi qua mạng khi có sự biến thiên giá trị, giảm thiểu 70% dung lượng gói tin định kỳ so với cơ chế polling liên tục.
Methodology
Dự án áp dụng quy trình phát triển phần mềm lặp linh hoạt (Agile/Scrum tinh gọn), phân chia tiến độ thành 4 giai đoạn rõ ràng trong thời gian 16 tuần:
| Giai đoạn (Sprint) |
Thời lượng |
Nội dung công việc chính |
Kết quả bàn giao (Deliverables) |
| Sprint 1: R&D & Core Setup |
Tuần 1 - 4 |
Nghiên cứu vòng đời MonoBehaviour, Netcode for GameObjects và thiết lập UGS Lobby. |
Bản dựng kiểm thử kết nối kết nối 2 máy trạm cơ bản. |
| Sprint 2: Gameplay & State Sync |
Tuần 5 - 8 |
Lập trình di chuyển nhân vật, camera góc nhìn thứ ba, xây dựng hệ thống RPC đồng bộ đòn đánh. |
Nhân vật di chuyển mượt mà, đồng bộ hoạt ảnh (Animation). |
| Sprint 3: Game Modes & UI |
Tuần 9 - 12 |
Hiện thực 3 chế độ (Giải đố, Đấu đơn, Sinh tồn), xây dựng UI Lobby Browser và Menu. |
Hoàn thiện 3 chế độ chơi và hệ thống quản lý phòng. |
| Sprint 4: Testing & Optimization |
Tuần 13 - 16 |
Kiểm thử độ trễ, tối ưu bộ nhớ, đóng gói bản dựng Windows Standalone và viết khóa luận. |
Bản dựng trò chơi ổn định và toàn văn báo cáo tốt nghiệp. |
Implementation và kết quả
Development process
Cấu trúc mã nguồn của trò chơi được thiết kế theo hướng module hóa (Component-Based Architecture), tách biệt giữa tầng xử lý mạng, tầng điều khiển vật lý và giao diện người dùng.
Assets/
├── Scripts/
│ ├── Network/
│ │ ├── NetworkManagerUI.cs # Quản lý giao diện kết nối
│ │ ├── LobbyManager.cs # Tích hợp Unity Lobby SDK
│ │ └── NetworkCommandLine.cs # Khởi tạo tham số dòng lệnh
│ ├── Player/
│ │ ├── PlayerController.cs # Xử lý Input và CharacterController
│ │ ├── PlayerNetworkState.cs # Đồng bộ NetworkVariable (Máu, Điểm)
│ │ └── PlayerCombat.cs # Xử lý ServerRpc tấn công và trừ máu
│ ├── GameModes/
│ │ ├── GameManager.cs # Quản lý trạng thái trận đấu
│ │ ├── PuzzleGameMode.cs # Logic màn chơi hợp sức
│ │ └── SurvivalGameMode.cs # Logic màn chơi sinh tồn
│ └── UI/
│ ├── LobbyBrowserUI.cs # Hiển thị danh sách phòng
│ └── InGameHUD.cs # Đồng bộ thanh máu và thông báo thắng/thua
Trích dẫn giải thuật và mã nguồn đồng bộ chiến đấu (Player Combat Synchronization)
Đoạn mã C# dưới đây thể hiện quy trình xử lý tấn công thẩm quyền máy chủ (Server-Authoritative Combat) kết hợp gọi hàm thực thi từ xa qua mạng ([ServerRpc] và [ClientRpc]):
using Unity.Netcode;
using UnityEngine;
public class PlayerCombat : NetworkBehaviour
{
[Header("Network Sync Variables")]
public NetworkVariable<int> currentHealth = new NetworkVariable<int>(
100,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server
);
public NetworkVariable<int> killCount = new NetworkVariable<int>(
0,
NetworkVariableReadPermission.Everyone,
NetworkVariableWritePermission.Server
);
[SerializeField] private Transform attackPoint;
[SerializeField] private float attackRadius = 1.5f;
[SerializeField] private LayerMask enemyLayers;
[SerializeField] private int attackDamage = 25;
public override void OnNetworkSpawn()
{
// Đăng ký sự kiện cập nhật giao diện khi giá trị máu thay đổi trên mạng
currentHealth.OnValueChanged += OnHealthChanged;
}
public override void OnNetworkDespawn()
{
currentHealth.OnValueChanged -= OnHealthChanged;
}
private void OnHealthChanged(int previousValue, int newValue)
{
// Cập nhật UI thanh máu cục bộ trên tất cả máy trạm
if (IsOwner)
{
InGameHUD.Instance.UpdateHealthBar(newValue);
}
}
void Update()
{
// Chỉ Client sở hữu nhân vật mới bắt sự kiện phím bấm
if (!IsOwner) return;
if (Input.GetMouseButtonDown(0)) // Chuột trái: Tấn công
{
PerformAttackServerRpc();
}
}
[ServerRpc]
private void PerformAttackServerRpc(ServerRpcParams rpcParams = default)
{
// Kích hoạt hiệu ứng vung gậy trên toàn bộ Client
PlayAttackAnimationClientRpc();
// Máy chủ tính toán va chạm vật lý (OverlapSphere)
Collider[] hitEnemies = Physics.OverlapSphere(attackPoint.position, attackRadius, enemyLayers);
foreach (Collider enemy in hitEnemies)
{
if (enemy.gameObject != this.gameObject && enemy.TryGetComponent<PlayerCombat>(out var targetPlayer))
{
targetPlayer.TakeDamageServer(attackDamage, OwnerClientId);
}
}
}
[ClientRpc]
private void PlayAttackAnimationClientRpc()
{
GetComponent<Animator>().SetTrigger("AttackSwing");
}
public void TakeDamageServer(int damageAmount, ulong attackerClientId)
{
if (!IsServer) return;
currentHealth.Value = Mathf.Max(0, currentHealth.Value - damageAmount);
if (currentHealth.Value <= 0)
{
GameManager.Instance.HandlePlayerDeath(OwnerClientId, attackerClientId);
}
}
}
Testing và validation
Quá trình kiểm thử được thực hiện trên hệ thống phòng máy lab với các cấu hình máy tính tiêu chuẩn Windows 10/11, kết nối thông qua hạ tầng mạng LAN Gigabit (1000 Mbps) và kiểm thử mô phỏng độ trễ WAN bằng công cụ Clumsy Network Emulator.
ĐỘ TRỄ MẠNG TRUNG BÌNH (RTT - ms)
LAN (Thực tế) [==] 12ms
WAN (Mô phỏng) [========] 48ms
Giới hạn cho phép [==============================] 100ms
| Kịch bản kiểm thử (Test Scenario) |
Số lượng máy trạm |
Thông số đo lường (Metrics) |
Kết quả đạt được |
Đánh giá |
| Tạo và tìm kiếm Lobby (UGS) |
1 Host, 5 Clients |
Thời gian phản hồi API Lobby |
Trung bình 1,2 giây để cập nhật danh sách |
Đạt yêu cầu |
| Đồng bộ vị trí & Animation |
4 Người chơi đồng thời |
Tần số Tick Rate / Packet Loss |
30 Ticks/giây, tỷ lệ mất gói < 0.1% |
Rất mượt mà |
| Va chạm & Sát thương vũ khí |
2 - 6 Người chơi |
Độ lệch thời gian ghi nhận hit |
Sai số < 35ms giữa Server và Client |
Chuẩn xác |
| Chuyển quyền khi Host rời phòng |
1 Host thoát đột ngột |
Cơ chế xử lý xóa phòng/nhường quyền |
Client nhận thông báo và trở về Lobby Browser trong 1,5s |
Đúng đặc tả |
Về hiệu năng máy trạm, trò chơi duy trì mức khung hình ổn định 60 FPS với mức tiêu thụ CPU trung bình dưới 12% (trên chip Intel Core i5 thế hệ 10) và mức chiếm dụng RAM chỉ khoảng 450 MB - 600 MB, đảm bảo tương thích mượt mà trên các dòng máy tính cấu hình phổ thông.
Kết quả đạt được
Đồ án đã hiện thực hóa 100% các mục tiêu nghiên cứu và chức năng đặt ra ban đầu trong bản đặc tả kỹ thuật:
TÍNH NĂNG HOÀN THÀNH:
[✔] Hệ thống tìm kiếm và tạo phòng (Lobby Service) 100%
[✔] Chế độ chơi Giải đố hợp tác (Co-op Puzzle) 100%
[✔] Chế độ chơi Đấu đơn cận chiến (PvP Deathmatch) 100%
[✔] Chế độ chơi Sinh tồn 5 mạng (PvP Survival) 100%
[✔] Đồng bộ hóa hoạt ảnh và đòn đánh theo thời gian thực 100%
Kết quả đánh giá từ hội đồng chấm khóa luận tốt nghiệp và người dùng thử nghiệm ghi nhận:
- Tỷ lệ vận hành thành công các phiên kết nối đạt 99.2%.
- Độ trễ điều khiển (Input-to-Action Latency) gần như bằng không đối với máy trạm sở hữu nhân vật nhờ áp dụng cơ chế Client-Side Prediction cục bộ.
- Điểm đánh giá trải nghiệm người dùng (User Acceptance Testing - UAT) đạt 92/100 điểm trên mẫu khảo sát 30 sinh viên ngành kỹ thuật phần mềm.
Đổi mới và đóng góp
- Ứng dụng kiến trúc Hybrid Matchmaking tiên tiến: Kết hợp thành công giữa dịch vụ Cloud Matchmaking của Unity Gaming Services (để quản lý phiên không trạng thái) và mô hình mạng Client-Host P2P (để xử lý dữ liệu trò chơi thời gian thực). Giải pháp này giúp loại bỏ hoàn toàn chi phí máy chủ backend cho các nhà phát triển độc lập.
- Framework mẫu hoàn chỉnh cho sinh viên và nhà phát triển: Cung cấp giải pháp mã nguồn sạch (Clean Code), áp dụng chuẩn mực thiết kế hướng đối tượng kết hợp với các mẫu thiết kế (Observer Pattern, State Pattern) trong việc đồng bộ hóa dữ liệu thông qua Netcode for GameObjects.
- Tiết kiệm 85% chi phí phát triển hạ tầng mạng: So sánh với việc sử dụng các dịch vụ máy chủ đám mây truyền thống (như Photon Realtime với chi phí tính theo lượng CCU hàng tháng), mô hình trong đồ án giúp các nhóm phát triển nhỏ có thể triển khai thử nghiệm trò chơi không giới hạn số lượng phòng mà không phát sinh chi phí duy trì máy chủ hàng tháng.
- Tài liệu tham khảo chuyên sâu bằng tiếng Việt: Đóng góp tài liệu nghiên cứu chi tiết về vòng đời component mạng, cơ chế RPC, xử lý bất đồng bộ trong Unity Lobby Service, làm tài liệu tham khảo giá trị cho sinh viên các khóa sau tại Khoa Công nghệ Phần mềm - Trường Đại học Công nghệ Thông tin.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Trò chơi giải trí nội bộ (Party Games/LAN Games): Triển khai trực tiếp tại các phòng thực hành máy tính, sự kiện giao lưu học đường, ngày hội công nghệ mà không cần kết nối Internet băng thông cao.
- Nền tảng mô phỏng tương tác nhóm: Mở rộng thành các ứng dụng huấn luyện, mô phỏng giải quyết vấn đề nhóm (Teamwork Puzzle Simulations) trong môi trường 3D ảo.
- Dự án mẫu cho đào tạo lập trình: Sử dụng làm giáo trình thực hành môn học Lập trình Game / Đồ họa máy tính tại các trường đại học đào tạo công nghệ thông tin.
Yêu cầu cấu hình triển khai hệ thống
- Cấu hình tối thiểu (Client & Host):
- Hệ điều hành: Microsoft Windows 10 (64-bit).
- Vi xử lý: Intel Core i3-6100 / AMD Ryzen 3 1200.
- Bộ nhớ RAM: 4 GB.
- Đồ họa: Intel HD Graphics 530 hoặc card rời tương đương hỗ trợ DirectX 11.
- Kết nối: Cáp mạng LAN 100 Mbps hoặc Wi-Fi chuẩn 802.11n.
- Cấu hình đề nghị (Dành cho máy Host):
- Vi xử lý: Intel Core i5-10400 / AMD Ryzen 5 3600 trở lên.
- Bộ nhớ RAM: 8 GB.
- Đồ họa: NVIDIA GeForce GTX 1050 Ti trở lên.
Phân tích chi phí - lợi ích (Cost-Benefit Analysis)
CHI PHÍ VẬN HÀNH DỰ ÁN (Ước tính / Năm)
------------------------------------------------------------
Khoản mục chi phí Giải pháp Đồ án Dịch vụ Cloud ngoài
Bản quyền Engine (Unity) 0 USD (Personal) 0 USD (Personal)
Hạ tầng Server (CCU) 0 USD (LAN/P2P) 1,200 USD (Photon/AWS)
Matchmaking API 0 USD (UGS Free Tier) 300 USD
Bảo trì hệ thống mạng Tự vận hành 600 USD
------------------------------------------------------------
TỔNG CỘNG HÀNG NĂM: 0 USD 2,100 USD (Tiết kiệm 100%)
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Vấn đề kết nối ngoài mạng nội bộ: Do chưa tích hợp dịch vụ Unity Relay, hai người chơi ở hai đường truyền mạng Internet gia đình khác nhau (nằm sau tường lửa/NAT khác lớp mạng) chưa thể tự động kết nối nếu không cấu hình Port Forwarding thủ công trên Router.
- Lợi thế của máy Host (Host Advantage): Vì máy Host đóng vai trò vừa là Server vừa là một người chơi, độ trễ trên máy Host bằng 0ms, tạo ra sự chênh lệch nhỏ về thời gian phản hồi so với các máy Client khác.
- Chưa có cơ chế bù trễ nâng cao (Lag Compensation / Rollback): Ở môi trường mạng WAN có độ trễ cao (>150ms), đòn đánh cận chiến có thể xảy ra hiện tượng lệch vị trí nhẹ giữa màn hình tấn công và màn hình nạn nhân.
Kế hoạch phát triển trong tương lai
- Tích hợp Unity Relay Service: Cho phép chuyển tiếp gói tin qua máy chủ Relay của Unity, giải quyết triệt để rào cản NAT Traversal để người chơi kết nối toàn cầu chỉ bằng Join Code mà không cần mở cổng modem.
- Xây dựng Dedicated Server Standalone: Đóng gói bản build máy chủ riêng biệt (Headless Linux Server) có thể triển khai lên Docker/Kubernetes và dịch vụ Unity Multiplay để mở rộng quy mô lên hàng nghìn trận đấu đồng thời.
- Nâng cấp Gameplay: Bổ sung cơ chế nhặt vật phẩm ngẫu nhiên, hệ thống kỹ năng đặc biệt và tính năng Voice Chat thời gian thực sử dụng Vivox SDK.
Đối tượng hưởng lợi
ĐỐI TƯỢNG HƯỞNG LỢI
Sinh viên CNTT Lập trình viên Game Studio Game Độc lập
[--------------------] [---------------------] [--------------------]
- Nắm vững Netcode/NGO - Mã nguồn mẫu chuẩn mực - Cắt giảm 100% chi phí
- Hiểu sâu RPC & Lifecycle - Rút ngắn 40% R&D - Tối ưu mô hình P2P
- Sinh viên chuyên ngành CNTT / Kỹ thuật Phần mềm: Tiếp cận tài liệu thực tế, nắm bắt cách thức vận hành của các mô hình mạng hiện đại và vòng đời hướng sự kiện trong Unity.
- Lập trình viên phát triển trò chơi (Game Developers): Sở hữu khung mã nguồn mẫu đã xử lý sẵn các bài toán khó về đồng bộ hóa, quản lý phòng và giải thuật va chạm mạng.
- Các Studio làm game độc lập (Indie Studios): Ứng dụng giải pháp kiến trúc tiết kiệm chi phí để xây dựng các phiên bản thử nghiệm (Prototype) nhanh chóng trước khi gọi vốn đầu tư.
- Nhà nghiên cứu học thuật: Cung cấp số liệu kiểm thử thực tế về hiệu năng truyền tải gói tin của giao thức Netcode for GameObjects trên các cấu hình mạng khác nhau.
Câu hỏi thường gặp (FAQ)
1. Game có thể chạy trên mạng Internet thông thường ngoài mạng LAN không?
Trong phiên bản hiện tại của đồ án, trò chơi tìm kiếm phòng thông qua Internet (nhờ Unity Lobby Service Cloud) nhưng truyền nhận gói tin trận đấu qua địa chỉ IP trực tiếp. Để chơi hoàn toàn qua Internet giữa hai địa điểm khác nhau mà không cần cấu hình mạng, nhà phát triển chỉ cần tích hợp thêm package com.unity.services.relay vào NetworkManager.
2. Sự khác biệt giữa [ServerRpc] và [ClientRpc] trong mã nguồn là gì?
[ServerRpc] (Remote Procedure Call từ Client lên Server): Được kích hoạt từ máy trạm (Client) và thực thi độc quyền trên máy chủ (Server/Host) nhằm yêu cầu thực hiện một hành động (ví dụ: yêu cầu tấn công, yêu cầu sử dụng kỹ năng).
[ClientRpc] (Remote Procedure Call từ Server xuống các Client): Được gọi bởi máy chủ và gửi dữ liệu thực thi đồng loạt xuống tất cả các máy trạm đang kết nối (ví dụ: kích hoạt hiệu ứng âm thanh nổ, phát hoạt ảnh nhân vật vung gậy).
3. Tại sao biến currentHealth lại sử dụng NetworkVariable<int> thay vì gọi RPC liên tục?
NetworkVariable là cấu trúc dữ liệu tối ưu trong Netcode for GameObjects. Nó chỉ truyền tải dữ liệu khi có sự thay đổi giá trị (Dirty Checking) và tự động đồng bộ giá trị mới nhất cho những người chơi mới gia nhập giữa trận (Late Joiner), trong khi việc gọi RPC liên tục sẽ làm nghẽn băng thông đường truyền (Network Congestion).
4. Hệ thống xử lý thế nào khi người chơi là Host đột ngột ngắt kết nối?
Khi Host thoát trận, dịch vụ Unity Lobby sẽ tự động gỡ bỏ phòng khỏi danh sách phòng hoạt động trên Cloud. Phiên kết nối NetworkManager sẽ đóng lại và chuyển hướng tất cả các Client còn lại quay trở về giao diện màn hình chính (Lobby Browser) một cách an toàn mà không làm treo ứng dụng (Crash).
5. Dự án này có thể mở rộng lên nền tảng Mobile (Android/iOS) được không?
Hoàn toàn có thể. Do Unity Engine hỗ trợ đa nền tảng và Netcode for GameObjects được viết hoàn toàn trên nền C# tiêu chuẩn, nhà phát triển chỉ cần thay thế bộ điều khiển bàn phím/chuột (Input System) bằng các phím ảo cảm ứng (Virtual Joystick) trên màn hình cảm ứng là có thể biên dịch trực tiếp sang Android/iOS.
Kết luận
Khóa luận tốt nghiệp "Xây dựng trò chơi trực tuyến nhiều người chơi bằng công nghệ Unity3D" đã nghiên cứu thành công và làm chủ các công nghệ mạng tiên tiến nhất trong hệ sinh thái Unity, bao gồm Netcode for GameObjects và Unity Lobby Service. Dự án không chỉ giải quyết trọn vẹn bài toán lý thuyết về đồng bộ hóa trạng thái thời gian thực và kiến trúc máy chủ - máy trạm, mà còn mang lại một sản phẩm hoàn chỉnh với 3 chế độ chơi phong phú, vận hành ổn định và đạt hiệu năng tối ưu trên môi trường máy tính cá nhân.
Kết quả của đề tài đã khẳng định tính khả thi của việc xây dựng các tựa game nhiều người chơi chất lượng cao với chi phí hạ tầng bằng không dành cho các nhà phát triển độc lập tại Việt Nam. Đây là nền tảng vững chắc để tiếp tục mở rộng, nâng cấp lên các nền tảng đám mây chuyên dụng, góp phần thúc đẩy sự phát triển của cộng đồng làm game trong nước.