UGK-Server
快节奏多人联网游戏Demo,UGK-Server:unity、go、kcp server 。 服务器使用微服务架构,服务器游戏逻辑需要物理碰撞、寻路的使用Unity、C#开发,其他使用Go开发。 对应客户端ugk-client。 开发中......
服务
通用
服务 | 描述 |
---|---|
ugk-agent | 执行unity服务器docker进程的创建销毁 |
ugk-agent-manager | 管理ugk-agent服务,为玩家房间分配游戏进程 |
ugk-api | HTTP Restful请求接口 |
ugk-charge | 充值 |
ugk-chat | 聊天 |
ugk-common | 公共逻辑封装 |
ugk-game | 游戏微服务 |
ugk-gate | 网关,消息转换 |
ugk-lobby | 大厅,一般逻辑 |
ugk-login | 登录、账号 |
ugk-message | 协议消息 |
ugk-resource | 文档、脚本 |
ugk-stress-testing | 压力测试客户端集群 |
游戏
游戏 | 描述 |
---|---|
game-galactic-kittens | 2D多人飞船射击游戏 |
技术选择
- Unity、C# 客户端和服务器
- Go 服务器
- Kcp 网络通信 忘记和网关,网关和后端服务通信
- Protobuf+Grpc 内部网络通信
- Zookeeper 服务发现注册
- Mongodb,Redis 数据存储
- Docker、Jenkins 进行CI/CD
参考资料
网络
- Unity Multiplayer Networking
- FishNet
- Mirror
- Telepathy TCP前端
- kcp2k unity前端
- kcp-go go服务器
- grpc 服务器之间通信
- 可靠UDP,KCP协议快在哪?
同步
- Prediction,Reconciliation,Lag Compensation
- Latency Compensating Methods in Client/Server In-game Protocol Design and Optimization
- 无畏契约网络代码
Unity
- com.unity.multiplayer.samples.coop3D rpg示例demo
- com.unity.multiplayer.samples.bitesize小游戏示例demo
- GalacticKittens 2D示例demo
- ECS-Network-Racing-Sample ECS 赛车demo
TODO
- 网络同步、延迟、插值、回退(延迟补偿),物理同步,动画同步,位置方向同步
- 场景同步消息,transform同步消息,aoi管理
- 客户端同步封装,参考NetworkTransform、NetworkAnimator、NetworkRigidbody?(参考Mirror)
- 封装NetworkTransform 进行位置,方向,缩放同步,插值
- 客户端NetworkTransform 封装成抽象类,具体子游戏继承,子弹类需要同步速度,需要同步实体的唯一ID,配置ID,ConfigRole
- 服务器NetworkTransform只起配置作用,通过对象manager进行批量同步,子弹碰撞服务器检测,需要回滚
- 客户端和服务器配置都通过go服务器拉取
- 完整的GalacticKittensMatch流程
- Unity服务器日志打印类文件,添加Trace级别日志屏蔽输出
- 玩家进入游戏后端已经可以通过agent创建unity docker容器;下一步需要前端进入游戏场景,后端unity服务器开发,
- 房间号没有存数据库递增,一直是1?
- 场景消息同步定义,后端刷出小怪及客户端显示角色 ,小怪,boss同步频率低(1s一次?),给速度,客户端模拟,服务器出发了碰撞等在同步
计划
- Websocket网络通信
- 压力测试客户端使用ugk-web开发界面(vue3)
- 添加聊天、排行、匹配、房间(Mirror)服务
- 广告、充值接取
- 断线重连(ugk-client,unity后端服务器与网关等)
- 使用c#开发导表等图形化工具
- 服务器unity提取公共包,unity的package
- ugk-client 弹窗增加tween动画
- 后台管理系统查看unity docker服务器
安装
参考:https://www.runoob.com/docker/docker-install-mongodb.html
https://hub.docker.com/_/mongo?tab=description
# 1. 运行镜像 5.05版本
docker run -itd --name mongo --restart=always -p 27017:27017 mongo:latest --auth
# 2. 进入容器创建账号
$ docker exec -it mongo mongo admin
# 创建一个名为 admin,密码为 123456 的用户。
db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 尝试使用上面创建的用户信息进行连接。
db.auth('admin', '123456')
# 3. 连接地址
mongodb://admin:123456@192.168.110.2:27017/?authSource=admin&readPreference=primary&ssl=false