文章目录

  • 阶段目标
  • 环境搭建
  • 流程设计
  • 相关说明
  • 相关代码
  • 上述源码地址

写在前面的一段话:
之前准备用LuaServer写一个简单moba手游,后来觉得,LuaServer毕竟是前公司内部的产品,不是绝对开源的,也因着别的一些原因,决定放弃更新LuaServer相关的。
但个人学习不能停是不是,哈哈哈…今儿起,准备捣鼓捣鼓KBEngine。KBEngine之前也没有接触过,Unity也好久没碰过了,于是乎,就准备把这两者结合下,实现从入门到“放弃”的一个小目标吧。
这系列文章,会伴随自己业余时间,便实现代码便总结记录,当做一份学习笔记。
这里准备利用KBEngine作为服务端引擎,将Unity官网的坦克大战demo进行改造,目标是实现一个联机版坦克大战,同步方式采用状态同步来完成。
从上层功能开发入手,然后深入到源码层,以此完成一次自我学习的过程~同时,代码会在github上同步更新。


阶段目标

  • 环境搭建
  • 客户端能和KBEngine完成通信
  • Server端完成基本的从匹配到进入战场的功能,客户端做出响应

环境搭建

KBEngine官网:KBEngine官方网站
KBEngine源码:github源码
Unity版本:Unity 2019.1.0f2 (64-bit)
坦克大战demo:在Unity的Asset Store里面搜索关键字"Tanks"免费获取
服务端基础配置:WampServer

KBEngine默认是需要mysql数据库支持的,为了便于开发,减少前期投入的时间,利用WampServer傻瓜式一键式搭建一个简易的mysql运行环境。
关于KBEngine环境的具体搭建,参考官网,官网的环境搭建文档还是很详细的,文档传送门在此:点我!传送门

流程设计

简单了解了下,KBEngine的cell部分主要承担的是space内相关的数据操作,比如移动、战斗等等,base上承担的则是一些基础性的东西。(这是刚接触时,给我的感觉,可能说的不准备,等待后续深入学习再具体看)。基于这个认识,我们从登陆、匹配到进入战场的第一阶段目标,基本上和cell是无关的,全部在base上实现得了。
先奉上一份上述操作的设计流程时序图:

Client BaseApp Login Accout验证 Account->>PlayerAvatar PlayerAvatar::onEnter PlayerAvatar请求SpaceMgr进入大厅 reqMatch 通知玩家所在大厅,进行匹配 onMatch Client BaseApp

相关说明

  • Account是kbe引擎层在客户端登录时默认创建的第一个entity实体,配置第一个实体的文件在assets\res\server\kbengine.xml里面的accountEntityScriptType字段
  • Account的任务就是验证登录相关性,所以在验证完成后,我会创建出一个PlayerAvatar的对象,并把Account的proxy转移给PlayerAvatar,此后与客户端交互的对象就从Account转移到PlayerAvatar身上了。同时,真正进入相应space空间的是PlayerAvatar这个entity而非Account,Account在此时是可以考虑destroy了的。(对于proxy的解释,放在后续文章里,这里简单理解为通过他就可以和客户端通信就好~)。
  • SpaceMgr是一个全局的Space管理器,所有的Space(大厅、战场等)全部由这个管理器来维护管理,SpaceMgr本身也是一个Entity。

相关代码

Account.pydef becomePlayerAvatar(self):"""从Account成为Avatar:return:"""avatar = KBEngine.createEntityLocally('PlayerAvatar', {})if avatar:DEBUG_MSG("Account[%i].becomePlayerAvatar\n" % self.id)self.activeAvatar = avatarself.giveClientTo(self.activeAvatar)
PlayerAvatar.pydef onClientEnabled(self):INFO_MSG("PlayerAvatar::onClientEnabled, ready to enter space")spaceMgr = KBEngine.globalData['SpaceMgr']spaceMgr and spaceMgr.enterSpace(self, SpaceType.SPACE_TYPE_HALL)
SpaceRoom.pydef avatarReqMatch(self, avatarID):INFO_MSG("[SpaceRoom], %i, %i, avatar:%s reqMatch." % (self.id, self.uType, avatarID))self._wait_to_match_avatar_set.add(avatarID)matchNum = len(self._wait_to_match_avatar_set)if matchNum >= MatchArgs.BATTLE_ROOM_MATCH_PLAYER_NUM:INFO_MSG("[SpaceRoom], %i, %i, ready to enter battle room" % (self.id, self.uType))for _ava_id in self._wait_to_match_avatar_set:_avatar = self._avatar_dict.get(_ava_id, None)_avatar and _avatar.client.onEnterBattleRoom()self._wait_to_match_avatar_set = set()returnfor ava_id in self._wait_to_match_avatar_set:_avatar = self._avatar_dict.get(ava_id, None)if not _avatar:continue_avatar.client.onMatch(matchNum)

上述源码地址

至此,一个特别特别版的初步目标达成了,可以从客户端发起登录、匹配、完成匹配的流程。这个版本里面,硬编码写死了2人匹配,匹配完成后直接跳到熟悉的坦克大战场景。。
画面很突兀,也没润色,有画面感的版本会在第二篇文章里面给出,这篇文章的个人小目标就是实现一次基本的通信流程。
guthub源码地址: 联机版坦克大战github地址

基于ComblockEngine+Unity的联机版坦克大战(一)相关推荐

  1. 基于Netty的联机版坦克大战

    基于Netty的联机版坦克大战 项目介绍 项目github地址:基于Netty的联机版坦克大战 该项目实现了联机版坦克大战,项目包括客户端与服务端 项目使用技术: 使用Netty实现客户端和服务端之间 ...

  2. java swing 版坦克大战

    1.基于Java swing版坦克大战,git链接:https://github.com/zhangliqingyun/TankGame.git 2.项目包结构图,TankGame.java程序启动类 ...

  3. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端

    简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...

  4. Unity开发游戏--2D坦克大战(一)

    Unity开发游戏--2D坦克大战(一) 前言 开发环境 场景搭建 新建工程 导入素材 设置Camera 设置游戏窗口大小 保存场景 创建角色 创建图片角色 修改角色大小 生成Prefab 前言 游戏 ...

  5. 从零开始5——简陋版坦克大战(2)

    从零开始5--简陋版坦克大战(2) 往期内容 从零开始5--简陋版坦克大战(1) 从零开始制作一款游戏4--DarkRoom-I改进版 2020新春献礼--从零开始制作一款游戏3 从零开始制作一款游戏 ...

  6. jQuery 版坦克大战游戏

    查看效果 下载地址 jQuery 版坦克大战游戏,仅完成了一个基本的对战模块雏形,为你打造功能完备的大型射击类网页游戏做准备.通过这个小游戏的编程实战,你可以了解到角色转换.角色移动.子弹碰撞判断.生 ...

  7. html5+javascript+css实现---网页版坦克大战---无需运行环境

    html5+javascript+css实现-网页版坦克大战-无需运行环境,只需一个浏览器,重拾少年情. 运行环境-除老版IE浏览器都可以: 源码需要请:点赞留言邮箱: 可以跳关,回退关卡.支持双人坦 ...

  8. Java版坦克大战游戏

    技术:Java等 摘要: Java随着各种电子设备,其中尤其是移动通信设备的发展所诞生的一项新的开发技术.Java定位在各种电子设备产品的功能应用上,对电子产品的多样,智能化,提供了很大的帮助.本次设 ...

  9. python版坦克大战

    Python版坦克大战 Python一千行代码搞定坦克大战游戏. 在开发坦克大战游戏项目中,我们使用的是pygame模块来完成的,所以得先装好pygame模块.本游戏一共封装了11个类和两个模块(py ...

最新文章

  1. oracle to_char函数的使用
  2. [转载]深入理解JavaScript闭包(closure)
  3. 解释一下python中的//,%和**运算符
  4. python 文件流
  5. [tools]notepad++当前文件路径不是工作路径
  6. oracle视图不能创建,ORACLEsoctt不能创建视图
  7. redis依赖_请勿过度依赖 Redis 的过期监听
  8. VScode-Go can't load package: package .: no buildable Go source files in
  9. 怎样查找共享文件_计算机操作系统学习笔记(五):文件管理
  10. 机器学习入门——图解支持向量机
  11. LINUX使用消息队列的代码
  12. elasticsearch 批量插入
  13. 计算机一级高级办公软件,计算机一级与高级办公软件
  14. SCDM学习笔记(4)
  15. 图片一句话木马简单制作方法
  16. 仿微博视频边下边播之滑动 TableView 自动播放
  17. Enjoying virus ⌒●ǒ●⌒
  18. android http下载限速,安卓手机端两种让网盘不限速下载方法介绍
  19. jquery 处理页面弹出层查询数据等待的操作(gif图片加载等待)
  20. 公交车信息查询管理系统(Java实现)

热门文章

  1. 蓝桥杯真题:全球变暖
  2. 使用Python实现基于强化学习与游戏化学习典型算法
  3. Unity 贴图压缩方法和对比
  4. Sightseeing Trip(Floyd)
  5. Spring注解驱动开发(二)
  6. 怎么插入html和书签,如何:在“设计”视图中插入 HTML 超链接和书签
  7. 黑苹果 卡IOConsoleUsers: time(0) 0->0, lin 0, llk 1, IOConsoleUsers: gISOcreenLockState 3, hs 0, bs 0, n
  8. 正则表达式是如何让你的网页卡住的(优化100ms到2ms)
  9. Cozmo 机器人编程环境搭建
  10. 实例说明MongoDB存储的行情数据如何选择合适的Shard Key