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版)》是一本专门介绍如何开发多人网络游戏的实战书籍,手把手教你搭建网络框架,制作大型项目。