在Unity中使用GRPC框架
1.环境搭建
1.首先,需要去GRPC官方下载一些插件
官方链接:https://github.com/grpc/grpc/tree/061fcbb214658197cbe40dabb305ecacd5434dda/examples/csharp/HelloworldUnity/Assets
(没有的话我放在网盘里面了https://pan.baidu.com/s/1iMLvNmFs9Vd5VdLiqYFtvg,提取码:069n)
2.然后将插件放在Unity工程的Plugins文件夹下。
3.打开VS,在Unity的工程下再新建一个专门用来生成协议脚本的工程,如图:
4.为工程添加以下四个程序包。
5.然后打开工程根目录,将proto文本copy到该目录下。
6.然后双击打开,配置根路径
2.生成C#接口协议文件
右击,生成项目即可
生成的C#接口协议文件位于项目根目录下的 obj\Debug\netcoreapp3.1(3.1为版本,具体根据你的版本而定)路径之下,如下图:
每一个proto文件都会生成两个对应的CS脚本,将所有生成的cs脚本放入到Unity工程中,即可请求对应的接口了
3.接口请求
//首先引入GRPC.Core命名空间
using Grpc.Core;
//然后定义类channel并实例化,实例化传入服务端地址端口号,用于链接对应的服务器
public Channel channel = new Channel("127.0.0.1:8080", ChannelCredentials.Insecure);
//然后定义一个异步双向流用于接收等一下我们将用调用的流请求API的返回值
public AsyncDuplexStreamingCall<RoomStreamRequest, RoomStreamResponse> roomStream;
//调用API,该API是由我们的proto所生成的RoomGrpc类中的一个RoomGrpcClient类,一般每个接口类中都有一个这样的建立client的接口类,实例化,传入channel
var client = new RoomGrpc.RoomGrpcClient(channel);
//然后调用client中的Room()方法,即可生成一个双向的链接,当然根据不同的协议也可能是一个单项的求情
roomStream=client.Room();
//建立好链接以后我们先进行一个请求
//先实例化一个RoomStreamRequest流请求类,然后设置请求类的一些属性例入具体请求的接口是Joinenvent等
RoomStreamRequest streamRequest = new RoomStreamRequest();
streamRequest.JoinEvent = new JoinEvent();
//然后将这个请求类异步写入流中即可
roomStream.RequestStream.WriteAsync(streamRequest).Wait();
//接下来就是流读取服务器返回
while(clientStream.ResponseStream.MoveNext().Wait())
{
//mes中即为服务为你返回的数据
var mes=clientStream.ResponseStream.Current;
}