多人在线游戏服务器Kbengine在线调试-类《双人成形》游戏
我们在上一篇文章中《3-Kbengine+Unity3D多人在线游戏之guiconsole调试你的游戏服务器》中介绍了调试工具guiconsole,这章我们游戏项目中进行实际操作。
下面是我的游戏教程的截图
资源地址
https://learn.u3d.cn/tutorial/3d-adventure-william-anna
https://www.bilibili.com/cheese/play/ss221275286
https://www.sikiedu.com/my/course/1999
一、调试技巧方法
1:允许系统产生core文件(仅Linux)
2:断点调试
仅引擎层c++代码可以使用断点调试,我们这章不介绍,感兴趣的朋友查看网上资源
https://kbengine.github.io//cn/docs/documentations/onlinedebugging.html
3:log脚本调试
这是开发中随时都能使用到的代码监测方法
打log的原代码在KBEDebug.py中,如下有5种,我们可以在项目中的任意脚本处写入这5个方法,如下图
代码示例如下
DEBUG_MSG("xbPreRemoveRoom"),当删除我们的房间时打一个log
def xbPreRemoveRoom(self, roomKey):
if not self.tempRoomKeyList.get(roomKey):
return
DEBUG_MSG("xbPreRemoveRoom")
self.tempRoomKeyList[roomKey]["Creator"][0].client.onxbPreRemoveRoom()
if "JoinPlayer" in self.tempRoomKeyList[roomKey]:
Avatar.py中当角色被删除时调用“WARNING_MSG("Avatar::onDestro
def onDestroy(self):
"""
KBEngine method.
entity销毁
"""
DEBUG_MSG("Avatar::onDestroy: %i." % self.id)
room = self.getCurrRoom()
WARNING_MSG("Avatar::onDestroy: %i." % self.id)
打开guiconsole调试窗口,如下黑体字是DEBUG_MSG信息, WARNING_MSG是黄色的信息
4:监视变量
这是我们最常用的一种方法,引擎允许使用工具监视当前进程上默认提供的变量(例如:总发包数,当前在线的玩家数),同时用户也可以在脚本中添加需要监视的变量。
查看方式: GUIConsole->watcher选项卡。
下面直接上代码示例
1)添加脚本监视变量的例子(监视在线玩家数和房间数):
baseapp->watcher.py:
...
def countPlayers():
i = 0
for e in KBEngine.entities.values():
if e.__class__.__name__ == "Avatar":
i += 1
return i
...
KBEngine.addWatcher("scripts/countPlayers", "UINT32", countPlayers)
...
def countRooms():
i = 0
for s in KBEngine.globalData.keys():
if "Room" in s:
i += 1
return i
...
KBEngine.addWatcher("scripts/countPlayers", "UINT32", countPlayers)
KBEngine.addWatcher("rooms", "UINT32", countRooms)
2)安装watcher.py监视器
Baseapp->kbemain.py:
...
def onBaseAppReady(isBootstrap):
Watcher.setup()
3)下面我们开始实际操作
第一步,打开“类《双人成形》”的游戏服务器
首先保证下面的9个窗口没有问题(没有红色的错误行),如下
第二步,再打开服务器调试工具guiconsole
打开调试器
左边树形窗口勾选baseapp(因为监视变量是在baseapp上的),,然后右边窗口我们切换标签页到Watcher并点选scripts行,在最右边的窗口栏我们可以看到刚才我们建立的两个变量“rooms”,“players”,因为我的们的客户端还没有建立“房间”和“玩家”,所以数值都是0,如下图
第三步,打开两个《类双人成行》客户端,并预备进入房间
我简略下两个玩家的登陆操作,然后两个玩家同时进入“房间10001”,如下图
然后再看我们的服务器端的调试器,如下图
如上图,最左边树形窗口选中baseapp条目(因为监视变量是在baseapp上的),中间部分Watcher标签页中选中scripts,然后最右边就会显示我们刚才建立的两个监视变量“rooms”和“players”,“rooms”为0 是因为房间是预建立还没有进入房间所以是0,“players”为2,因为只进入了两个玩家所以是2。
第四步,两个玩家进入“房间10001”,如下图
如上图是建立房间的玩家(只能建立房间的玩家才能点击“开始游戏”)点击“开始游戏”后两个玩家进入房间的效果
再看guiconsole调试窗口,如下图
“rooms”房间号为1,因为我们两个玩家进入了一个房间内。
以上我们就把kbengine和unity网络交互时的详细调试方法介绍完了。