Mirror网络框架
生命周期
Unity.Awake->Unity.Start->Mirror.OnStart
Client=>Server
1.Command
客户端调用服务端方法
[Command]//让服务端运行某方法
CmdFunc(T value) { }
2.权限问题(脚本需要使用Command)
1.父物体必须拥有NetworkIdentity组件,脚本继承NetworkBehaviour
2.物体必须加入NetworkManager预制体的Registered Spawn Prefabs列表
3.让Sync脚本或其子脚本通知服务器,去创建物体
4.物体的首次使用Command,不能在Awake中
Command案例
----------PlayerManager--------- //在PlayerManager的OnAwake进行方法注册 public override void OnAwake() { EventManager.Instance.RegisterEvent(Common.EventType.OnClientStart, LoadPlayer); } //等待客户端连上服务端后的回调 private void LoadPlayer() { Sync.Instance.player.CmdLoadPlayer(); } ----------PlayerManager--------- ----------Sync : NetworkBehaviour--------- public static Sync Instance; public SyncPlayer player; //服务端回调,此时各种通信已准备就绪 public override void OnStartLocalPlayer() { Instance = this; player = GetComponentInChildren<SyncPlayer>(); EventManager.Instance.PostEvent(Common.EventType.OnClientStart); } ----------Sync : NetworkBehaviour--------- ----------SyncPlayer : NetworkBehaviour--------- //服务端创建对象,同时让所有客户端也创建 [Command] public void CmdLoadPlayer() { GameObject go = Instantiate(Resources.Load<GameObject>("Prefabs/Player")); NetworkServer.Spawn(go, connectionToClient); } ----------SyncPlayer : NetworkBehaviour--------- //最后就是在Player身上的脚本,要使用的Command不能在Awake里,其他都能用 //当该客户端断开连接时,服务端和其他客户端的该Player也会被销毁
Server=>Client
服务端调用客户端方法
1.Rpc
Remote Procedure Call
必须加上RpcXXX
//1.向自己广播 [TargetRpc] RpcSelfFunc(T value) { } //2.向目标广播target = XXX.GetComponent<NetworkIdentity>().connectionToClient [TargetRpc] RpcTargetFunc(NetworkConnectionToClient target, T value) { } //3.向所有对象广播 [ClientRpc] RpcAllFunc(T value) { } //4.向除自己之外的对象广播 [ClientRpc(includeOwner = false)] RpcOtherFunc(T value) { }
2.SyncVar
同步变量
顾名思义,每个对象需要同步的变量
例如玩家名字,当用户加入房间后,需要得到其他玩家的名字,虽然Cmd+Rpc也能写,但会麻烦很多
[SyncVar(hook = nameof(OnMsgChanged))] public string msg; public void OnMsgChanged(string _Old, string _New) { Debug.Log(_Old + _New); }
其中,msg必须由服务端去修改
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!