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必须由服务端去修改

posted @   被迫吃冰淇淋的小学生  阅读(181)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示