流星

流星消逝的时候,光明已在望。黑暗无论多么长,光明迟早总是会来的。

unity与c++使用protobuff通信 有更新!

    参考这篇文章配置开发环境
    https://www.cnblogs.com/tangxin-blog/p/5698137.html
    unity使用protobuff-net作为网络协议序列化
    后端使用c和protobuf c作接收
    希望达到的目标有
    消息传递无误,且能正确反序列化识别
    现在的服务端是用传奇的服务端改的,只留了游戏网关(7200端口),和游戏服(5000端口),客户端连游戏网关-网关加数据头发送给游戏服,这样2个层次应该差不多了,本来还想去掉游戏网关的,但是又要改数据头,还是留着算了

    正在实验能否成功对接
    1:编写proto文件,这个定义了消息的数据结构
    2:得到protobuff c的proto生成.h .cc工具,对proto文件批量生成.h .cc,放到c服务端内
    3:得到protobuff-net的proto生成.cs工具,生成的.cs放到unity客户端内
    4:服务端做好接收消息准备,客户端序列化一个包,并且每个包头二字节存入包大小,发送给服务端,服务端收到2字节后,得到整包大小,一直收,一直到能解一个完整包为止,看能否反序列化解开
    5:服务端序列化一个包同样发给客户端,看客户端是否能正确解开

    这样实现起来非常麻烦,每次都要定义一些共用的proto文件,并且还要用不同工具生成二个语言使用的源码文件,添加到前后端项目中
    初步测试成功,下一步是把游戏网关和游戏服调通

    用传奇的服务端来改
    先去掉登陆网关和登陆服,数据库服。不要登陆。以后弄其他游戏再一步步加回来
    基本就是 客户端连网关-网关分发到各个游戏服,游戏服取得内存状态回发给网关
    初步做的信息有
    得到房间列表
    进去房间
    创建房间
    同一个房间的玩家之间的信息同步

    发觉protobuf,虽然序列化反序列化能力实用,但是使用起来不算方便,C++里定义一个结构体,设置好字节对齐,然后用指针指向包首地址,整个数据结构的所有字段全部出来了
    而protobuf总是一大堆解包,设置成员变量,压包,繁琐了。不知道有没有简单的用法。

    第一步获取服务器虚拟的房间,成功
    第二部,进入房间,(客户端选择模型,选择武器,进入场景)
    第三部,进入场景,(服务端向其他客户端发送新角色进场消息,并把一部分数据预先传给其他客户端)
    第四部,同步地图信息,角色信息(服务端最好能拥有当前场景的数据,否则可能还要选一个做主机,以这台机器的数据为主)
    第五部,试着做角色间的交互

    一点点来吧,最先还是,选择角色模型,选择武器,进入场景,移动,跳跃,动画,这部分先解决

    validate