goworld是一套分布式开源Go语言游戏服务器引擎,本节将会讲解goworld示例的调试方法。学习引擎的第二步是调试示例,goworld附带聊天室和枪战两个例子,其中的枪战例子用Unity客户端,有较大的参考价值。
系列文章
枪战例子处于unity_demo目录下,包含了6个go文件。
运行服务端
和聊天室例子不同,枪战例子拥有登录注册的功能,服务端需要把数据保存在数据库中,需要先搭建数据库。如果不搭建数据库直接编译和运行实例, 会发现游戏服无法启动,提示如下图的失败信息。
goworld build examples/unity_demo
goworld start examples/unity_demo
可以打开goworld目录下的game.log,查看详细的错误提示,此时会提示“fatal Storage engine is not ready: no reachable servers”
数据库配置
打开/root/go/src/http://github.com/xiaonanln/goworld中的goworld.ini(如下图),可以看到一些配置项。
数据库的类型、地址和端口都配在这里,必须时可以改动。我们使用默认的配置,即使用mongodb。
安装mongo
在centos上,可按以下命令安装和启动mongo数据库
#打开mongodb.repo文件
vim /etc/yum.repos.d/mongodb.repo
#输入以下内容
#开始安装mongo数据库
yum install mongodb-org
启动mongo
#输入如下指令启动数据库,默认的端口是27017,不做修改
service mongod start
#输入如下指令启动mongo客户端做测试,如果能连接,说明数据库正常
mongo
启动
启动mongo服务端后,便可以编译和开启服务端程序了。
goworld build examples/unity_demo
goworld start examples/unity_demo
值得一提的是,开启多少个服务,以及gate的端口也在goworld.ini里配置。比如这里gate1的端口是14001,说明客户端需要连接到这个端口上来。如果服务器设置了安全组,要记得开放权限。
可以用tcp连接这个端口试一试,如果能够连接,至少说明gate在工作,命令如下
telnet 127.0.0.1 14001
搭建客户端
goworld提供了unity客户端示例,我们的目标是将之运行起来。先在github上把unity客户端工程下载下来。
打开后可以看到如下的目录结构
使用unity 2018即可打开,但由于年久失修或版本的问题,会报错,需要自行修复。如下提示的是PostProcessing/Editor下的文件报错。
由于该文件对游戏没有影响,最简单的修复方法就是将整个PostProcessing/Editor目录给删掉,删掉后即可运行游戏。
双击login打开登录登陆场景,然后运行游戏。
此时能够看到登录窗口,输入用户名和密码注册,然后就能够登陆游戏。
虽然游戏可以运行,但客户端并不是连接着我们自己的服务端,需要修改成我们自己服务端的IP和端口才行。打开GoWorldController。
里面有个写死的ip和端口“122.112.252.25:15001”,改成自己服务器的IP和端口即可。
更改即可连上自己的服务器。
可以注册、登录,可以运行多个客户端,测试游戏。
登录后进入战斗场景,看到两个玩家(因为开了两个客户端),可以在场景里移动。
会刷出怪物,可以杀死怪物;怪物也会攻击玩家,杀死玩家。
至此,已经可以运行示例游戏。
简单修改,让敌人不会移动
接下来尝试做个简单的修改,让敌人不会移动,站着被玩家打,以便确认我们改的动。
如下,打开服务端的Monster.go文件,把AI定时器给注释掉。
重新编译和运行服务端
goworld stop examples/unity_demo
goworld build examples/unity_demo
goworld start examples/unity_demo
运行游戏,即可看到乖乖的敌人。
推荐些资料
「同步」也是网络游戏开发的核心课题。玩家的位置和旋转需要同步给其他玩家,然而网络条件差,会不同步和卡顿。笔者主讲的live《网络游戏同步算法》揭示做好同步的方法,欢迎收听。
笔者所著《Unity3D网络游戏实战(第2版)》是一本专门介绍如何开发多人网络游戏的实战书籍,手把手教你搭建网络框架,制作大型项目。