1. Mirror网络库插件深度解析
Mirror作为Unity网络开发的高效解决方案,其核心设计理念是简化多人游戏开发中的网络同步问题。与UNET相比,Mirror在保持API兼容性的同时进行了大量优化,特别适合中小型团队快速构建稳定的网络游戏架构。
1.1 网络通信三大核心机制
1.1.1 远程过程调用(RPC)
RPC机制是Mirror最基础也最常用的网络通信方式,它允许在不同终端上执行特定方法:
- Command特性:标记为[Command]的方法会由客户端发起,但只在服务端执行。这是客户端向服务端发送请求的标准方式。需要注意Command方法名必须前缀"Cmd",这是Mirror的命名约定。
csharp复制[Command]
void CmdFireWeapon(int damage)
{
// 这段代码只在服务端执行
enemy.TakeDamage(damage);
}
- ClientRpc特性:标记为[ClientRpc]的方法由服务端发起,在所有客户端上执行。常用于广播全局状态更新。方法名需要前缀"Rpc"。
csharp复制[ClientRpc]
void RpcUpdateScore(int newScore)
{
// 所有客户端都会执行这段代码
scoreText.text = newScore.ToString();
}
- TargetRpc特性:针对特定客户端的RPC调用,方法名需要前缀"Target"。常用于私聊系统或针对特定玩家的状态同步。
csharp复制[TargetRpc]
void TargetShowNotification(NetworkConnection target, string msg)
{
// 只有指定连接的客户端会执行
Notification.Show(msg);
}
重要提示:所有RPC方法都必须是void返回类型,且只能传递Mirror支持的基本数据类型和网络对象。复杂数据结构需要特殊处理。
1.1.2 网络回调系统
Mirror提供了两种级别的回调机制:
NetworkManager回调:
继承NetworkManager并重写其虚方法,可以监控网络层的核心事件:
csharp复制public class CustomNetworkManager : NetworkManager
{
public override void OnServerConnect(NetworkConnection conn)
{
base.OnServerConnect(conn);
Debug.Log($"客户端 {conn.address} 已连接");
}
public override void OnClientDisconnect(NetworkConnection conn)
{
base.OnClientDisconnect(conn);
Debug.Log("与服务器断开连接");
}
}
NetworkBehaviour回调:
在继承NetworkBehaviour的脚本中,可以获取更细粒度的
