📅  最后修改于: 2023-12-03 15:05:44.742000             🧑  作者: Mango
Unity MLAPI是一个用于协作网络游戏服务器的框架。它旨在使开发人员能够轻松地创建可扩展的网络游戏,并且支持多种网络方案和Unity引擎版本。
您可以从GitHub上的Unity MLAPI库中获取Unity MLAPI的最新版本。
安装Unity MLAPI的最新版,可以通过以下步骤:
您需要首先将Unity导出的项目克隆到本地:https://github.com/Unity-Technologies/com.unity.multiplayer.mlapi.git.
打开Unity并导入新的项目.
最后您将找到新模块,Multiplayer MLAPI Examples,如图所示.
下面是如何在Unity中使用成熟的Unity MLAPI项目的要点:
如何创建网络身份验证:
using MLAPI;
using MLAPI.Transports.UNET;
public class NetworkManagerHelper : MonoBehaviour {
// 定义用于控制网络连接的NetworkManager
private NetworkManager networkManager;
public void Start() {
// 这改变了UNTY Transport的端口
NetworkManager.Singleton.GetComponent<UNETTransport>().Port = 7777;
networkManager = NetworkManager.Singleton;
networkManager.OnClientDisconnectCallback += NetworkManager_OnClientDisconnectCallback;
networkManager.OnServerStopEvent += NetworkManager_OnServerStopEvent;
}
// 关闭连接时执行
private void NetworkManager_OnServerStopEvent() {
Debug.Log("Server has been stopped.");
}
// 当一个客户端断开连接时执行
private void NetworkManager_OnClientDisconnectCallback(ulong obj) {
Debug.Log("Client has disconnected from server || " + obj);
}
}
// 创建一个新用户
public void SpawnPlayer() {
// 获取角色选择和输入名字
string selectedCharacterPrefab = "boxshape";
string playerName = "Player " + networkManager.ConnectedClientsList.Count;
// 在服务器上生成用户
networkManager.ConnectedClientsList[0].PlayerObject = Instantiate(Resources.Load(selectedCharacterPrefab), Vector3.zero, Quaternion.identity) as GameObject;
if (networkManager.IsServer) {
// 如果有一个客户端,哪怕是host,也会在客户端上生成用户
GameObject user = networkManager.ConnectedClientsList.SingleOrDefault(x => x.PlayerObject != null).PlayerObject;
if (user != null) {
user.GetComponent<PlayerInfo>().playerName = playerName;
Debug.Log(user.GetComponent<PlayerInfo>().playerName + " has entered the game!");
}
}
}
// 服务器生成的角色或客户端生成的角色
public class PlayerInfo : NetworkBehaviour {
[SerializeField]public string playerName;
}
// 建立连接
public void OnClientConnect(NetworkConnection conn) {
Debug.Log("Connecting...");
}
// 客户端连接失败
public void OnClientDisconnect(NetworkConnection conn) {
Debug.Log("Disconnected.");
}
// 服务器启动
public void OnServerStart() {
Debug.Log("Server has started.");
}
// 服务器停止
public void OnServerStop() {
Debug.Log("Server has stopped.");
}
// 角色运动
public void OnServerUpdate() {
GameObject user = networkManager.ConnectedClientsList.SingleOrDefault(x => x.PlayerObject != null).PlayerObject;
if (user) {
// 玩家输入采取的行动
if (Input.GetKeyDown(KeyCode.W)) {
user.transform.position += Vector3.forward;
} else if (Input.GetKeyDown(KeyCode.A)) {
user.transform.position += Vector3.left;
} else if (Input.GetKeyDown(KeyCode.S)) {
user.transform.position += Vector3.back;
} else if (Input.GetKeyDown(KeyCode.D)) {
user.transform.position += Vector3.right;
}
Debug.Log("Player (ID " + NetworkManager.Singleton.LocalClientId + ") Position: " + user.transform.position);
}
}
Unity MLAPI是一个用于协作网络游戏服务器的框架。该框架支持多种网络方案,使开发人员能够轻松创建可扩展的网络游戏。此外,Unity MLAPI还支持多种自定义RPC,以及Mirror的移动插件。如果您正在开发多人游戏,那么Unity MLAPI是您必不可少的工具。