Unity的Protobuf安装

因为Wind使用Protobuf通信,所以首先要安装Unity的Protobuf库,建议以DLL的形式安装,直接放在Unity工程的Assets/Plugins目录下(没有就新建一个)。image.png

  1. 首先下载protobuf的C#源码:https://github.com/protocolbuffers/protobuf/releases 版本是3.19.2。
  2. 使用VS将源码编译成动态库,编译不过可能是.Net版本问题,可以直接google搜索下
  3. 将编译好的全部动态库放在Unity工程Assets/Plugins目录下

    发送接口

    Wind的Unity接口基本上都在Agent.cs文件中,包含连接接口,断开接口,以及发送数据接口。
    image.png

    连接服务器

    ```csharp public void ConnectToServer(string _ip, int _port) { ip = _ip; port = _port; AddNetworkThreadTask(ConnectFunc); // 需要在网络线程里处理所以主线程加到网络线程队列里 }

// 调用方式如下 WindNetwork.Agent.GetInstance().ConnectToServer(“127.0.0.1”, 50100);

  1. <a name="HPHwG"></a>
  2. ## 发送数据
  3. ```csharp
  4. public bool SendRequest(IMessage protoObj)
  5. {
  6. AddNetworkThreadTask(SendRequestFunc, new SendData
  7. {
  8. ProtoData = protoObj,
  9. });
  10. return true;
  11. }
  12. // 调用方式如下
  13. public void SendJoinRoomPakcet()
  14. {
  15. var req = new WindNetwork.PlayerJoinRoomRequest();
  16. req.PlayerId = playerId;
  17. WindNetwork.Agent.GetInstance().SendRequest(req);
  18. }

断开连接

  1. public void Disconnect()
  2. {
  3. if (isConnected)
  4. {
  5. isConnected = false;
  6. tcp.socket.Close();
  7. }
  8. }
  9. // 调用方式如下
  10. WindNetwork.Agent.GetInstance().Disconnect();

接收数据

客户端发送数据给Wind服务器后,Wind服务器会回包给客户端,客户端以Callback的形式接收数据并处理数据,具体代码在Handler.cs文件中。
image.png

服务器消息的Update

因为网络是单独起了一个线程,所以主线程要处理服务器消息的话,需要调用网络线程的NetUpdate函数。具体可以看下这个案例的使用方式

  1. // Update is called once per frame
  2. void Update()
  3. {
  4. WindNetwork.Agent.GetInstance().NetUpdate();
  5. }

服务器消息的Callback

  1. public static partial class WindHandler
  2. {
  3. public static void On_PlayerLoginResponse(WindNetwork.PlayerLoginResponse pck)
  4. {
  5. Debug.Log($"recv packet:{pck}");
  6. // 服务器回包后,客户端逻辑可以在这里处理 比如,登录成功后就开始游戏
  7. GameMgr.inst.OnStartGame();
  8. }
  9. }

Unity接口代码

  1. -- ProtoGen # 目录存放服务器生成的protobuf对象以及协议工厂,这个目下的文件一般不能更改
  2. ---- GenProtoFactory.cs # 协议工厂代码
  3. ---- Player.cs # probuf生成的协议对象文件
  4. -- Agent.cs # Unity的网络接口实现都在这,外部一般调用这里面的接口
  5. -- Handler.cs # 服务器消息的回调函数
  6. -- Message.cs # 网络二进制数据转化的格式类
  7. -- MsgPack.cs # 对象数据序列化和反序列接口 数据的格式转化方式可以在这里看到
  8. -- TCPConn.cs # TCP连接数据

ProtoGen目录下的文件由服务器自动生成,一般运行script目录下的gen_protobuf.bat就会生成最新的协议数据,然后覆盖老数据。