客户端调用归属于服务端的对象的方法时需要调用ServerRPC。
ServerRPC
_参考实现逻辑:客户端向服务端发送RPC后服务端根据接收到的数据的协议(枚举)来执行服务端内对应的游戏逻辑方法。
客户端
//客户端使用ServerRPC ClientBase.Instance.Request((ushort)ProtoType.Login,PlayerData.PlayerName);
服务端
protected override bool OnUnClientRequest(Player unClient, RPCModel model) { switch ((ProtoType)model.protocol) { case ProtoType.Login: //接收到ProtoType.Login枚举后执行服务端的Login方法 Login(unClient, model.AsString); break; default: break; } return false; }
服务端需要调用所有的客户端的某个方法(即广播到所有客户端)时需要使用ClientRPC。 当服务端需要调用某一个客户端时发送需要操作的客户端的token供客户端过滤。
ClientRPC
参考代码如下
private void Login(Player client, string username) { var token = client.Token; client.PlayerName = username; Call(client, (ushort)ProtoType.Login, token, 0); Debug.Log("玩家 "+username+" 加入了服务器"); LoginHandler(client); }
//此处当服务器的Call方法(ClientRPC)执行完毕后客户端的Request会返回状态码。我们可以根据状态码执行接下来需要的方法。 ClientBase.Instance.Request((ushort)ProtoType.Login,PlayerData.PlayerName);
Deleting the wiki page "双端RPC" cannot be undone. Continue?