1
双端RPC
Eicy edited this page 2024-12-04 00:46:13 +08:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

服务端RPC

客户端调用归属于服务端的对象的方法时需要调用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;
}

客户端RPC

服务端需要调用所有的客户端的某个方法(即广播到所有客户端)时需要使用ClientRPC。 当服务端需要调用某一个客户端时发送需要操作的客户端的token供客户端过滤。

参考代码如下

服务端

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);