Trang chủ » Blog » Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

bởi CodeGym | 23/07/2024 09:36 | Blog

Việc chơi game không chỉ dừng lại ở trải nghiệm chơi game trên điện thoại với AI. Người chơi còn có thể kết nối, chơi cùng những người chơi khác trên toàn thế giới. Các tựa game đình đám hiện nay như Free Fire MAX hay Liên Minh Huyền Thoại,… là trò chơi điện tử thể loại đấu trường trực tuyến nhiều người chơi được Riot Games lấy cảm hứng từ bản mod Defense of the Ancients của Warcraft III,.. Quá trình tạo ra một game online như thế này qua các bước giai đoạn như thế nào? Hãy cùng CodeGym tìm hiểu kỹ thuật game đa người chơi (multiplayer) trong Unity với C# trong bài viết này nhé.

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C# – Sử dụng Unity Gaming Services 

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Đây là giải pháp kết nối để xây dựng trò chơi và trải nghiệm 3D thời gian thực được cung cấp bởi Unity Technologies.

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Giải pháp điều phối của Game Server Hosting (Multiplayer) cung cấp hiệu suất cần để mang đến lối chơi nhất quán, cho phép chơi bất cứ khi nào, bất kể ở đâu.

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Đây là ví dụ mã đơn giản sử dụng Netcode:

using System.Collections.Generic;
using Unity.Netcode;
using UnityEngine;

public class NetworkCommandLine : MonoBehaviour
{
private NetworkManager netManager;

void Start()
{
netManager = GetComponentInParent<NetworkManager>();

if (Application.isEditor) return;

var args = GetCommandlineArgs();

if (args.TryGetValue("-mode", out string mode))
{
switch (mode)
{
case "server":
netManager.StartServer();
break;
case "host":
netManager.StartHost();
break;
case "client":

netManager.StartClient();
break;
}
}
}

private Dictionary<string, string> GetCommandlineArgs()
{
Dictionary<string, string> argDictionary = new Dictionary<string, string>();

var args = System.Environment.GetCommandLineArgs();

for (int i = 0; i < args.Length; ++i)
{
var arg = args[i].ToLower();
if (arg.StartsWith("-"))
{
var value = i < args.Length - 1 ? args[i + 1].ToLower() : null;
value = (value?.StartsWith("-") ?? false) ? null : value;

argDictionary.Add(arg, value);
}
}
return argDictionary;
}
}

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C# – Sử dụng Photon Engine

Photon là sản phẩm của Exit Game. Nó cho phép bạn xây dựng và khởi chạy các trò chơi nhiều người chơi trên toàn thế giới trên tất cả các nền tảng. Photon có thể tập trung phát triển trò chơi của mình trong khi chúng tôi mở rộng quy mô để đáp ứng nhu cầu của người chơi, từ những người dùng đầu tiên cho đến hàng triệu người dùng.

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

  • Hiệu suất cao: Xử lý hàng nghìn đối tượng được nối mạng qua hàng trăm kết nối máy khách, bao gồm cả quản lý sở thích phức tạp.
  • Cung cấp nội suy ảnh nhanh: Cung cấp khả năng hiển thị hình ảnh mượt mà của các đối tượng từ xa cho khách hàng, ngay cả trong điều kiện mạng kém.
  • Độ trễ thấp: Bù đắp cho sự chậm trễ giữa lúc khách hàng bắn vũ khí của mình và máy chủ đăng ký đòn đánh tiềm năng.
  • Nhất quán: Mỗi đối tượng có tính nhất quán đầy đủ hoặc tính nhất quán cuối cùng.

Photon cung cấp giải pháp tương thích, chất lượng hàng đầu được xem xét nghiêm ngặt để tích hợp Unity liền mạch, nêu bật một thành tựu quan trọng của các nhà phát triển.

Sau khi đăng ký bạn sẽ được cung cấp một ID cụ thể cho từng trò chơi.

Kỹ thuật game đa người chơi (multiplayer) trong Unity với C#

Sau đây là một ví dụ mã sử dụng Photon:

using UnityEngine;
using Photon.Pun;

public class PlayerController : MonoBehaviourPunCallbacks
{
private float speed = 5f;

void Start()
{
// Check if the current player is the local player
if (photonView.IsMine)
{
// Enable the local player's camera
Camera.main.gameObject.SetActive(true);
}
else
{
// Disable other players' cameras
Camera.main.gameObject.SetActive(false);
}
}

void Update()
{
// Only allow local player to move
if (!photonView.IsMine) return;

float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");

Vector3 moveDirection = new Vector3(horizontalInput, 0, verticalInput);
transform.Translate(moveDirection * speed * Time.deltaTime);
}

// Called when this GameObject is destroyed
void OnDestroy()
{
// Make sure to leave the room when the player is destroyed
PhotonNetwork.LeaveRoom();
}
}

Tổng kết

Đối với nhiều người dùng, việc chơi trò chơi trên thiết bị với AI và chơi với máy sẽ gây nhàm chán. Tuy nhiên, với kỹ thuật nhiều người chơi, việc kết nối tới những người chơi trên toàn thế giới sẽ có tác dụng giữ người dùng. Ngoài ra, nó còn có nhiều chức năng như gọi điện, nhắn tin trong quá trình trải nghiệm. Việc kết nối tương tác người chơi theo thời gian thực tăng tương tác cũng là một xu thế trong phát triển Game Unity.

Nếu bạn còn gặp khó khăn trong quá trình tạo game, tham khảo ngay lộ trình học game unity bài bản từ A-Z của CodeGym tại đây nhé.

Nguồn tham khảo. 

Tags: game

0 Lời bình

Gửi Lời bình

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

BÀI VIẾT LIÊN QUAN

BẠN MUỐN HỌC LẬP TRÌNH?

GỌI NGAY

098 953 44 58

Đăng ký tư vấn lộ trình học lập trình

Đăng ký tư vấn, định hướng lộ trình học và giải đáp các thắc mắc về ngành nghề – Miễn phí – Online.

14 + 5 =

TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM
TƯ VẤN VỀ LỘ TRÌNH HỌC NGHỀ LẬP TRÌNH TẠI CODEGYM