Unity的Protobuf安装
因为Wind使用Protobuf通信,所以首先要安装Unity的Protobuf库,建议以DLL的形式安装,直接放在Unity工程的Assets/Plugins目录下(没有就新建一个)。
- 首先下载protobuf的C#源码:https://github.com/protocolbuffers/protobuf/releases 版本是3.19.2。
- 使用VS将源码编译成动态库,编译不过可能是.Net版本问题,可以直接google搜索下
- 将编译好的全部动态库放在Unity工程Assets/Plugins目录下
发送接口
Wind的Unity接口基本上都在Agent.cs文件中,包含连接接口,断开接口,以及发送数据接口。
连接服务器
```csharp public void ConnectToServer(string _ip, int _port) { ip = _ip; port = _port; AddNetworkThreadTask(ConnectFunc); // 需要在网络线程里处理所以主线程加到网络线程队列里 }
// 调用方式如下 WindNetwork.Agent.GetInstance().ConnectToServer(“127.0.0.1”, 50100);
<a name="HPHwG"></a>
## 发送数据
```csharp
public bool SendRequest(IMessage protoObj)
{
AddNetworkThreadTask(SendRequestFunc, new SendData
{
ProtoData = protoObj,
});
return true;
}
// 调用方式如下
public void SendJoinRoomPakcet()
{
var req = new WindNetwork.PlayerJoinRoomRequest();
req.PlayerId = playerId;
WindNetwork.Agent.GetInstance().SendRequest(req);
}
断开连接
public void Disconnect()
{
if (isConnected)
{
isConnected = false;
tcp.socket.Close();
}
}
// 调用方式如下
WindNetwork.Agent.GetInstance().Disconnect();
接收数据
客户端发送数据给Wind服务器后,Wind服务器会回包给客户端,客户端以Callback的形式接收数据并处理数据,具体代码在Handler.cs文件中。
服务器消息的Update
因为网络是单独起了一个线程,所以主线程要处理服务器消息的话,需要调用网络线程的NetUpdate函数。具体可以看下这个案例的使用方式
// Update is called once per frame
void Update()
{
WindNetwork.Agent.GetInstance().NetUpdate();
}
服务器消息的Callback
public static partial class WindHandler
{
public static void On_PlayerLoginResponse(WindNetwork.PlayerLoginResponse pck)
{
Debug.Log($"recv packet:{pck}");
// 服务器回包后,客户端逻辑可以在这里处理 比如,登录成功后就开始游戏
GameMgr.inst.OnStartGame();
}
}
Unity接口代码
-- ProtoGen # 目录存放服务器生成的protobuf对象以及协议工厂,这个目下的文件一般不能更改
---- GenProtoFactory.cs # 协议工厂代码
---- Player.cs # probuf生成的协议对象文件
-- Agent.cs # Unity的网络接口实现都在这,外部一般调用这里面的接口
-- Handler.cs # 服务器消息的回调函数
-- Message.cs # 网络二进制数据转化的格式类
-- MsgPack.cs # 对象数据序列化和反序列接口 数据的格式转化方式可以在这里看到
-- TCPConn.cs # TCP连接数据
ProtoGen目录下的文件由服务器自动生成,一般运行script目录下的gen_protobuf.bat就会生成最新的协议数据,然后覆盖老数据。