UnnyWorld:验尸

在我们的UnnyWorld游戏结束后,许多成为朋友的开发人员要求在游戏上写一个验尸报告 。 我决定分享一些具体示例,这些示例在开发期间已经积累了很多。 我们会犯一些错误,我将尝试给出一些有用的技巧。



早些时候,我发表了一篇文章“我的MMO的三年发展” ,其中更多地涉及寻找投资,团队和我们通往“成功”的道路。 不幸的是(或幸运的是?),该项目不得不关闭。 在本文中,我将尝试回顾所犯的错误,并可能至少给出一些有用的提示。

概述游戏


按照惯例,Unnyworld可以分为两部分:城市建设者和竞技场。
关于建造者的部分是《部落冲突》。 您有自己的星球,需要装备。 您可以攻击其他星球以窃取资源。



攻击其他玩家,您就是您的角色之一,并且可以控制它。

Arenas-具有不同模式(标志捕获,点捕获等)的典型MOBA 3v3。



每个角色都有自己的咒语,可以与其他玩家一起使用。


在战斗之前,您可以改变法术。

图片


整个游戏周期如下所示:

  1. 为了抽出咒语,需要从宝箱上掉下来的卷轴。 宝箱可以通过各种免费方式获得(用于联赛,赢得皇家大战等)或购买。
  2. 要提升该法术,您需要构建英雄并将其构建提高到一定水平。
  3. 为了改善英雄的建筑,有必要改善其他建筑(主建筑,祭坛等)。

也就是说,我们试图以某种方式调和地球和竞技场的统治。 我们可能做错了一切。

缺乏清晰的计划和策略


是的,很多事情都在不断地讨论着,但是却意识到它们是不合适的,而没有首先彻底分析需要做的事情。

结果,他们试图立即做所有事情。 当游戏有一个半用户时,您需要公会系统吗? 嗯,几乎没有。

您是否需要一个可以创建自定义比赛,在游戏的CCU较小时邀请朋友和联合会在那里的系统? 不知道

在开发过程中,我们尝试了很多事情来做某些可能在那个阶段不需要做的事情。 结果,没有实现真正必要的事情。

缺乏经验


因为 在我们主要只从事单人游戏之前,我们在选择一种或另一种技术时踩了很多耙。

让我们谈谈问题的技术部分。

技术选择


一点澄清。 在大多数情况下,我们纯粹是客户开发人员。 在整个团队中,只有少数人有使用服务器技术的经验。 关于政府,我通常保持沉默。 我将尝试通过对每种技术都有一个小总结来介绍特定技术。

使用哪个云提供商? AWS? 天蓝色? 软层

当时没有根本的区别。 另外,我们还为SoftLayer提供了一笔创业贷款。

哦,天哪,如果您只知道情况有多糟:

-Saport对这个问题不是很精通。 在某些情况下,我向他们求助于某个虚拟机上的问题(我无法连接等)。 我收到的答案是:
我们重新启动了汽车,现在一切都很好



-在某些情况下, 虚拟机启动了几个小时 。 如您所见,我等待了4个小时,但从未创建虚拟机。



-经常维护。



-碰巧在没有警告的情况下汽车将重新启动,或者专用网络将被切断。

结果,他们切换到了Azure。 没有这样的问题。 支持会迅速做出反应,并在出现问题时始终提供帮助。

好: -

不好:他们没有正确分析所有可能的选择。 但是服务器是在线游戏中最重要的部分= /

因此,您需要以某种方式在服务器上启动游戏实例,并在将玩家授权给所需实例之后通过API系统将其抛出。 我们该怎么办? 让我们来一个交钥匙的解决方案,根据负载来管理这项业务。 哇,有个叫Kubernetes的东西。 没错,她处于测试阶段……但无论如何,让我们尝试一下!

如果我们抛弃了您需要经验来使用该技术的事实,即使使用该业务的基本设置,它也会失败。 一些服务掉了,等等。

好吧,还有什么呢? 中层和Apache Mesos! 他的一切都一样,没有经验就很难。 如果有东西掉下来,那么没有手鼓就无法解决问题。

结果,他们自己写了所有东西。 实例从主管开始,实例上方的小型管理器也是如此(用Java编写)。 Java应用程序进入状态发现服务(实例上的空闲房间数等)。 使用有关实例的此信息授权并请求为API创建空间时,请求将转到正确的节点,这将在正确的实例上增加空间。

即 实例始终是运行前的。 由于短缺,我们正在提高新的VPS。

好:分析了替代方案。

不好:在原型上花了很多时间。 对于第一个版本,您完全不需要考虑这些事情,而只是在没有任何抱怨的情况下启动实例。 可以在原型中直接在客户端上对实例地址进行硬编码。

我们将www.consul.io用于发现服务,这可能是我们不后悔的解决方案之一。 是的,当重启期间配置中断时,会出现类似的问题。 但这很少见,并且计划外重启汽车。 总的来说,与领事共事一直是我的荣幸。

很好:他们提供了现成的解决方案,但并没有开始亲眼目睹。

为了进行部署,最初使用了bash脚本。


后来,我将整个部署转移到Ansible。 我今天还不够。 当然,起初会有问题。 但是该系统很容易学习,并且文档大量。

良好:快速编写bash脚本,不需要特殊知识。

坏:切换到普通部署系统时,我不得不丢弃几乎以前编写的所有内容。

对于他们的服务之间的通信,我们尝试了www.rabbitmq.com 。 但是他几天之内就没有话题了,可能会崩溃。 结果,他们以一种简单的方式做到了—如果您只需要向一个方向发送请求,则所有服务都可以通过纯tcp套接字或具有保持活动状态的http请求进行交互。

好:分析了替代方案。 我们选择了一个好的解决方案。

坏:缺乏技术经验。 无需将无法解决的问题拖到生产中。

在线玩意味着您需要一个聊天室。 写你自己吗? 它不太可能可扩展。 让我们准备一些东西。 XMPP? 埃贾伯德? 看起来不错。 总的来说,我们尝试了刺猬和MongooseIM,但最终还是选择了刺猬。 在其服务器上提高存储容量时会遇到一些问题(出现消息计时冲突,崩溃等)。 我们决定使用他们的云解决方案ejabberd-saas.com 。 是的,已付款。 但这没有问题。

好:分析了替代方案。 选择适当的选项。

不好:我们没有解决本地问题,而是决定使用付费的云解决方案。 那里的价格从200欧元起。 我们有几个游戏区域。 对于独立团队来说,这是非常可观的,最好花在其他方面。

最初,我们通常没有任何用于在服务器上收集指标的系统。 为什么请求速度变慢? 服务有什么问题? 现在有几个房间? 是的,我们甚至看不到当前有多少房间可用!

后来才意识到需要做些事情。 尝试使用Graphite + Grafana。 甚至连docker之前的镜像都做到了这一切: github.com/Suvitruf/docker-grafana-graphite-diamond

但是它没有解决。 我不想花时间在此上,我们决定使用现成的东西。 选择落在www.datadoghq.com上

一切都很好。 仪表,警报,图表。 客户驱动程序与石墨驱动程序几乎相同。 美人 但是...每个主机每月10 + $。 III ...每月的费用为200 + $。

我们意识到为此付出了很多钱,现在为时已晚。 尽管如此,我们还是决定在我们的服务器上执行此操作。 设置www.influxdata.com 。 结果,一辆几十美元的汽车悄悄地处理了数十辆/几百辆汽车的指标。

好:我们很快尝试了。 找到了现成的替代方案。 他们意识到(尽管迟了)该决定是错误的。 在本地设置便捷的系统。

不好:无法正确理解问题。 花了很多钱。

关于指标,性能同样存在问题。 首先,我们在配置文件上既不是客户端也不是服务器。 结果,发现游戏服务器实例上的内存泄漏为时已晚。 他们无法及时确定并修复。 结果,他们进行了编写,以便在创建一定数量的房间之后,游戏实例将重新启动。



关于概念和DG解决方案的一些知识


现在,我还无法及时为所有这些事件建立正确的顺序,我将列举一些我们做出的关键决定。

游戏按地区划分


玩家要求亚洲服务器和南美服务器(此服务器在欧洲和美国之前)。 为什么不这样做,是吧? 他们做到了。 结果,一个半用户分散在四个区域。 一旦有几个区域,那么您需要制作一个传输系统。 这合乎逻辑吗? 是合乎逻辑的。

好:几个人的Ping更好(。•́︿•̀。)

差:在创建区域,传输系统等上花费大量时间。

有必要听取玩家的建议/建议,但是您不应该立即逃避并意识到这一切。

用六角形代替正方形网格并重现对行星的攻击


以前,行星看起来像这样:



和攻击:



切换到十六进制在技术上简化了许多事情。 此外,它看起来更好,可以更轻松地处理游戏元素。

重做拼写系统


过去看起来像这样:



升级本身是针对从胸部掉落的宝石进行的。 一切都不是显而易见的,令人困惑。

结果,就像《皇家大逃杀》中的那样,他们用卷轴代替了石头系统。



为了提高咒语,您需要一定数量的卷轴。 一切都简单明了。

好:他们注意到有问题的地方,然后重新放置。

不好:最初他们没有分析玩家的感受。 对于开发人员来说,许多事情显而易见,玩家以完全不同的方式感知。 因此,必须尽早收集反馈,安排游戏测试等。

在Twitch上购物


我们甚至同意www.twitch.tv在游戏页面上进行游戏内购买。



但是因为 没有人播放我们的游戏,那么这种决定的含义通常为零。

好:从玩家那里提现公平资金潜在场所。

不好:如果您的游戏没有流式传输,那么这毫无意义。 只是浪费时间。

大逃杀模式


在大肆宣传之后,他们决定在游戏中削减这种制度。 但是因为 游戏中几乎没有在线,然后在这种模式下几乎只有机器人,这几乎消除了一切。



关于错误


在这样的项目中,很难不犯错误。 有许多相对无害的GUI错误。



例如,当玩家立即在竞技场中心死亡时,还有更严重的错误。 我们无法在本地重试此错误。 偶尔会发生这种情况,但我们无法修复。

切换角色时,一个有趣的错误没有删除前一个模型。 结果,可以艰苦地安排一个聚会。



还有与平台/引擎相关的错误。

例如,有时整个GUI可能会消失。 但是,如果您进入对象的层次结构并仅单击对象,则它会再次出现。


我们报告了有关Unity的问题。 他们回答说,他们可以给我们一个雇员每月10,000美元的帮助(ლ_ಠ)

在Facebook平台上,当游戏在错误的位置对游戏做出反应时,Gameroom的缩放比例出现问题。



这,更不用说各种库中的错误了。 例如,在某些Steamworks.NET计算机上, github.com/rlabrecque/ Steamworks.NET/ issues/121可能会崩溃

总结


我们几乎没有在市场营销上投入资金,我们希望参与者能够有机地涌入。 结果,游戏没有达到临界质量,此后将不再需要机器人,并且会有新玩家自然涌入。

特别是没有人参与内容管理和与玩家的交流,没有新闻通讯。

在开发过程中,各种技术的选择和测试浪费了很多时间。

没有功能/内容实施的明确计划。

通常,所有这些问题中的大多数都是由于经验不足造成的。

接下来是什么?


Unnyworld已关闭。 我们决定在当前机会的框架内缩小项目规模。

一篇文章没有涵盖所有内容。 而对于外人来说,我写的东西似乎有些不连贯的事实。 不幸的是,撰写此类文字不是专家。

如果您有任何疑问,我将很乐意在评论中或在新文章中回答。

Source: https://habr.com/ru/post/zh-CN417035/


All Articles