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é.
Nội dung
Kỹ thuật game đa người chơi (multiplayer) trong Unity với C# – Sử dụng Unity Gaming Services
Đâ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.
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.
Đâ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.
- 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.
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é.
0 Lời bình