另一种追求梦想。 RTS + Eyetracker学生手

你好

今天,我将向您介绍另一种狂热的房屋发展,兴趣和毅力可以带来多大的影响以及它们分解了什么。 总的来说,所有这些故事都是很标准的。

在剪切下,您将看到:用自己的双手创建RTS的详细历史(概念,代码,界面,天平,地图,模型),以及将IT跟踪器作为输入工具绑定的实验。




好吧,让我们开始吧。

在院子里2014
我是Polytech(现为“工程图形与设计”)信息设计系的学生。

凭着我的学士学位,我开发了一款关于两个法会决斗的联结游戏,在该游戏中,您必须躲避敌人的袭击,并全力以赴(请在这里!!!)。

在主人的工作中,我决定更进一步。 当时,该部门的实验室里出现了一种技术新颖的产品-IT跟踪器。 选择立刻落在了他身上。 毫无疑问,作品将是一场游戏;剩下的就是选择主题。 经过一番思考,我意识到我想对自己成长的战略感到荣幸,并为我打开了精彩的编程世界-Warcraft3。

但是,硕士论文不仅是产品的开发。 在更大程度上,它应该代表某种研究。 如何将IT跟踪整合到策略中的问题揭示了Pandora的优势。

在这里发挥了多年的游戏经验。 大多数游戏会尝试清除控件的屏幕,从而为内容提供主要空间。 在策略中,界面占用巨大空间。 要了解什么是特定单位,您需要在屏幕上找到它,选择它,查看“状态栏”,然后在其中找到必要的参数。 当在大型军队的战斗中出现类似的需求时,这种一系列行动往往会带来困难。



问题出现了:既然我们已经在现场找到了单位,那么为什么我们以后需要选择它来阅读信息? 为什么不仅仅看着他就得到它? 演示之后,该问题被转换为明智的名称“人机视觉操作区域在人机交互中的功能”,从本质上讲,这意味着在解决从多个对象中寻找对象并从中读取信息的问题时,比较鼠标和眼睛的有效性。

技术总结


有一个话题。 有一个概念。 这取决于技术的选择。 经过市场审查后,选择在Unity,UnrealSDK,libGDX之间进行,其中选择了Unity + C#。 掌握了界面,舞台上对象的生命周期以及与它们进行交互的可能性之后,我开始进行开发。



多亏了我们这个时代最伟大的奇迹-互联网-我找到了一系列令人叹为观止的教程,这些教程可以为未来的游戏奠定基础。 在经历了一系列的辅导员几个不眠之夜之后,我掌握了一个策略。 它的工人有能力建造建筑物。 能够开采资源的收割机和能够生产单位的建筑物。

这个基础足以进行实验。 没错,缺少了一个重要的组件-将IT跟踪器的功能连接到游戏本身。



IT跟踪系统是由两台计算机组成的一堆,其中一台显示针对用户的激励措施(称为Demonstrator),第二台收集并分析来自IT跟踪器的信息(称为Registrar)。 IT跟踪器提供了开箱即用的软件,该软件可以使两台机器同步,校准被测者的视线记录(每个人都有自己的眼睛参数和视线本身),然后运行一系列静态刺激来查看它。 在我的任务中,视觉注册应该被整合到一个无关的程序中。

为此,我必须研究演示者与注册服务商之间的交互协议。 数据传输是通过带有命令的UDP数据包通过本地网络进行的,这意味着我需要编写自己的校准客户端来模拟默认应用程序的操作。

我花了几天的时间来写一个客户。 首先作为第三方应用程序。 它使您可以进行校准,然后一目了然地控制屏幕上的矩形。 更准确地说,在凝视的固定点绘制了矩形。 似乎不是火箭科学,而是使用眼睛的能力不是作为获取信息的手段,而是作为输出工具,对外界的影响,喜悦和震惊的工具。

当一切准备就绪时,就该进行实验了。



有一个场景仅限于一个屏幕。 在其上,发射后会生成单位(坦克,哈哈)并开始随机移动。



每个单元都有一定的健康状况。 除了一个单位的生命值是HP的一半之外,所有单位的生命值都最高。 突出显示某个单位后,我们会在其周围看到带有运行状况指示器的框架。 谁的身体健康-指示灯为绿色且充满。 在受伤的部队里,他是红色的,半满。 目的是在其余的坦克中找到一个受伤的坦克,并将其隔离一秒钟。 主要测量参数是完成此任务所需的时间。 该实验包括5个级别,每个阶段的单元数量不同-5、10、15、20、25。假设是借助IT跟踪器解决此问题将需要较少的时间。

进行了实验,收集了数据。 现在是处理统计信息的时候了。 我使用了常用的工具-PHP和JavaScript,计算了Fisher准则,发现使用游标和使用itracker之间的差异具有统计意义。 当然,任务执行速度用作因变量。 然后,我使用D3.js可视化结果。

通常,通常为了解决此类问题,需要使用R语言或SPSS程序。 但是我天生喜欢节省能量和精神资源。 我认为浪费时间来学习这些额外的工具是一种低效的投资。



结果图片超出了我的期望。 事实证明,使用IT跟踪器的对象可以两次解决该问题,最多15个对象比使用鼠标的对象快三倍。

研究和主管对该文章进行了形式化,并发表在《感知》杂志上。

哇! 成功,名望等

在这里,我想单独提及我的主管。 多亏了他,我写了我的两个文凭,并总体上转向编程和人机交互。 帕维尔·奥尔洛夫(Pavel Orlov, 1岁和2岁)现在在伦敦帝国大学(Imperial College London)任教,但总的来说,他在IT跟踪器的帮助下研究人们,并开出各种有趣的笑话。

原则上,可以在这个阶段停下来,但是这位艺术家的灵魂大喊:作为大师的毕业作品,可以展示出比简单的项目更多的东西,而这个简单的项目被捆绑在一个教程中。

学习走路


要使游戏成为游戏,它必须具有概念,构想,情节和逻辑。 事件不应该在无尽的草地上发生,而应该在特定的地图上进行,除了建筑物和资源之外,还应该存在地形元素和某种植被...显然,部队不仅应该能够移动,而且玩家与世界的互动应该通过深思熟虑的界面进行。



我被机会和前景所蒙蔽,开始编写代码。 首先,我给了部队进攻的机会。 好吧,既然他们进攻了,当然他们需要保护,所以我的部队已经装满了盔甲。 建筑物有被毁的危险,因此单位必须学习如何维修。 为什么不同时增加出售这些相同建筑物的能力呢? 而且,如果您看起来更有希望,是否可以自己武装建筑物,以便它们可以从敌人手中击退?

这个想法成为决定我的项目的进一步开发和完整重构的基石。 至此,我有了一个WorldObject类,从该类继承了Unit和Building,每个类都有相应的功能。 单位可以移动,攻击,获取资源,建造建筑物。 建筑物可以站立并生产单位,但不能移动和进攻。 人们渴望建造一座安全大楼-塔楼或炮塔。 炮塔本来应该是建筑物,但具有单位固有的攻击能力。 这违反了我的所有计划。 有必要以某种方式从Unit类中删除攻击功能...

但是有可能更广泛地看待这个问题。 背面和单元之间还有其他中间链接吗? 还有其他将一类能力用于另一类的情况吗?

为了分析飞行情况,我决定研究:参考游戏-Warcraft3中还存在哪些其他此类不一致之处。 你知道吗? 它把它们变成了整个星系。 有可以攻击的建筑物,例如守卫塔或兽人洞穴。 有些人也可以移动,例如《远古战争》。 有些单位无法攻击,例如Wisp或在地图上乱窜的各种中性绵羊和猪(生物)。 关于建筑物和单元之间差异性质的思考一直在我的脑海中进行,我意识到没有这种差异。 这些只是玩家为方便自己而施加在程序上的含义。 只有单位及其能力-移动,攻击,生产单位,建造建筑物,获取资源等。



解决这种情况的明显方法是创建单元可以实现的接口。 创建了以下内容:MoveAbility,RotateAbility,AttackAbility,DefenseAbility,HpRegenAbility,DefenseAbility,ProducedAbility,BuildAbility,RepairAbility,SellSelfAbility。 该单位基本上只剩下一个带有名称,图像和型号的容器。 所有其他功能都附加在其顶部。

勇敢的新世界


现在由概念决定。

让我提醒您,此案发生在2014年。 然后,策略类型出现停滞,这影响了游戏本身类型的选择。 同样在那些年中,蒸汽朋克环境的流行程度明显上升。 我是世界的忠实拥护者,穿着铜和黄铜,身披蒸汽,奔向机械世界。 但是,仅凭蒸汽朋克的成功制作游戏对我来说似乎很无聊,我一直在寻找一种想法的发展。 我想在游戏中增加对抗感。 可以最大程度地反对技术工业文明的是什么? 当然,魔术与大自然融为一体! 是的,当然,您说的是Arcanum,但是该死的,随着时间的流逝,这种环境的美丽并没有消失。 此外,您将看到该项目并没有发展成一个克隆,而是一个学生睡着了的膝盖,而是演变成完全不同的东西。 也许与奥秘的思想完全相反。

谁将居住在这个世界上? 在我看来,现代幻想游戏(最终就是幻想)现在已经陷入原型危机。 显然,这是由于普遍拒绝而导致的,所有事物都变得更易于访问,并且对此更易于理解。 但是,这无可避免地使到处都是普通无聊的“人”,令人垂涎的“兽人”肌肉,从“精灵”的风度和其他人的酸度中变得酸痛,以至于无法理解和分离,以至于眼睛模糊了“神族”。

我想尽可能地远离所有这些,抽象自己。 还有什么比球更抽象的呢? 我摆脱了这种完美的几何形状。 向其中添加了“虫族”生物形态的一部分(是的,他犯了罪)。 我以为:为什么抽象生物不应该具有塑造自己的身体和所有外皮组织的能力?



这样球就诞生了。

他们还活着。 他们没有四肢。 他们具有与世界互动的动能能力和唱歌(如海豚)相互交流的能力。 他们非常密集地居住在地球上,但形成了两个能量中心。



一种是传统的,保守的,他们认为自己是自然的孩子,应最大限度地融入自然并为自然的发展做出贡献。



第二类-认为自己是自然进化算法的顶峰者,这意味着统治者有权烧毁工厂下的森林,并有权使烟雾和蒸汽使天空黯然失色。 而且,a,按照标准(蛋糕,他离开了兽人,但他没有离开狐狸),征服世界的第二个愿望迫使他们寻求扩大自己的物质基础,并把他们的军舰带到了森林茂密,晶莹剔透的土地上。

这条领带的背后是对完全历史事件的暗示。 难道不是在不那么美好的一天,印第安人看到征服者的桅杆在地平线上吗? 在球体的世界中,历史在重演,我们只向当地的印第安人提供了真正的巫术,征服者不是从15世纪的西班牙出发,而是从Bi斯麦德国出发。

因此,一场战争摧毁了两个文明。 我们的游戏本应从过去世界的碎片开始,在那里,一个年轻的部落开始在魔术和技术的这些变迁中寻找自我。

在手鼓和齿轮之间


但是发展如何?

游戏中只有一场比赛,但是在情节过程中,它可以修改自己。 消灭和探索世界获得的经验使您可以开始在魔术和技术的分支上发展。



首先,我们确定了两个分支-创作和破坏。 在他们每个人中都有几个射击场。 他们每个人的收到影响种族的所有单位和所有结构。 创造负责所有建设性特征-世界发展,生产,资源提取等。 反过来,破坏则是对自己的生命和一切活动造成破坏的原因。

在一个方向上泵入一个分支后,您立即阻止了在另一个方向上进行下去的机会。 最后,要回答这个问题,游戏中可以有多少场比赛可以不同-它是一个,但是发展潜力为4个完全不同。

在这里,我们有一个概念。 因此,现在该决定谁将加入我们的游戏了! 什么单位和建筑物,它们将如何变化。 经过大量讨论后,我们决定将重点放在基本策略上-工人(建造建筑物,提取资源),轻型部队(快速,脆弱),重型部队(缓慢,强大),弹射器(非常缓慢,非常薄弱,远程战斗)。 在建筑物中-基地(生产工人),巢(增加食物),营房(生产轻型和重型单位),车间(生产弹射器),庇护所/工厂(允许抽水)。

是的,我完全忘了谈论游戏资源。 我们决定保留经典的一对-晶体+食物限制,以及沿开发树发展的其他资源。 晶体是从地图上分散的沉积物中提取出来的(您好,星际飞船),通过建造特殊建筑物(巢)来增加食物的摄入量。 通过在有毒的间歇泉上建造两种建筑物中的一种-庇护所或工厂,可以获得额外的资源。 此外,游戏还具有销毁敌军和中立生物的经验。 如果玩家获得新的等级并拥有庇护所或工厂,那么他可以在发展树上注入一个额外的津贴。

但是回到单位和练级。

考虑了很长时间,我们考虑了升级分支将如何修改单位。 来到以下:
-蒸汽朋克+破坏会增加单位的伤害和射程。
-Steampunk + Creation增强了生产能力,使每个人都穿上盔甲,还提高了每个员工步行的利润。
-魔法+毁灭反过来使单位的进攻速度更快,并降低了成本,将弹射器变成了壁挂式火炮。
-魔法+创造增加了生命值,也大大提高了移动速度。

还记得我在上面说过,游戏与Arcanum在意识形态上相反吗? 在我们创造的世界中,技术和魔术并不是相互排斥的。 幻想时不时地让我们错失了巫师用机械脚而不是蒸汽或柴油发电厂由魔力水晶驱动的机械腿和坦克行走的愿景。

找到平衡点


所有这些听起来很简单,但是当我们试图将这种叙述转移到数字,精确值及其增长的空间中时,一切都变得非常混乱。 丢出一些技能值很容易,例如,这个单位受到+20伤害,而移动速度则为+15。 但是,很难减少大量参数来平衡。



在一张巨大的Google桌子上,我们记录了每个单元所需的所有更改,着重于美感。 美感与内在经验家齐头并进,因此,值的每一次变化都立即在试战现场进行了检查。



在某个时候,在第二天深夜的某个地方,人们意识到美好的感觉是件好事,但是只有逻辑和数学工具才能成功完成任务。

显然,应该将每个单位的所有值都减小为一个或多个系数,我们已经可以比较它们了。 事实证明,整个学校和整个大学并没有为您准备计算建造者的效率。 谁会给库房带来更多收益-背包中装载更多的货物或移动速度更快的人并不是那么明显。

经过一夜不眠的数学技巧之后,建立了用于计算不同类型的单位和建筑物有效性的公式,这一阶段或多或少地获得通过。

然后,可能有一个问题悄悄出现在您的脑海中:所有这些疯狂行为如何传播到游戏中?我会迅速回答-第一次采用精心打断的方法。但是,当每个分支在每个方向上都经历了两个开发阶段并且单元总数达到9时,我的内部懒惰程序员反叛了。对我来说,这是非生物颤抖的,我该怎么做这样愚蠢而愚蠢的例程呢?

然后,我创建了一个用于生成流树的Web应用程序。





RTSeditor ( ) , IAbility . .

JSON, ( , ).

, , “” .


. – , . , , , “” . – ( Avega ) - . ( Avatar4eg ) , . .

弗拉基米尔(Vladimir)帮助达成了将单位转移到IAbility系统的决定,然后决定将他的毕业设计与游戏联系起来。他的主题和目标是编写AI。一般而言,这项艰巨的任务得以解决,而我们的计算机对手则学会了重建基地,并用传送带将军队派往敌方发现的基地。

让我们回到开发。当我们已经拥有如此多种功能时,看着这些发达的生命如何在无尽的草地上吃草变得简直难以忍受。我想为他们创建一个世界,然后我开始创建地图。

第一步,我分析了WC3卡。我了解到,它们由几个对称分布的起点,中立的单位营地,基地进一步发展的点以及所有这一切之间的狡猾道路系统组成。

好吧,我尝试创建类似的东西,但是我的(嘿,用这些话,您可以将整个开发作为一个整体来编写)。



最初,地图是在纸上绘制和设计的。

然后在Photoshop中以黑白高度图对其进行概述。最初严格,然后获得了平滑度,平滑度和噪音。这里重要的一点是保持表面不可逾越的面与下降和上升之间的差异。

之后,此结构已从Unity中的平面中挤出。事实证明,这很轻松,与游戏卡非常相似。

但是他出了点问题。他完全是白人,大声喊着-添加我的纹理。

我做了什么



(, , ), WorldOfWarcraft, .







Unity , , . , . , — , , - . , .

一个巨大的惊喜在这里等待着我们。我们的部队沿着那条令人讨厌的草平面完美移动,巧妙地走到了一条理想直线的压迫点。当障碍物和不规则物体开始出现时,运动就开始出现问题。是的,球体没有腿,但这并没有阻止它们将它们破碎成小块。有必要给部队一个寻找路径的算法。

在这里,一位经验丰富的弗拉基米尔(Vladimir)进入了这个行业,他对该主题进行了探讨,并意识到实施任何现有方法来解决问题都非常费力。很快找到了一个可以解决问题的Unity插件(模块?)-A *。弗拉基米尔(Vladimir)找出了界面,并对其进行了调整以适应我们的需求。此后,单位开始完美地找到通往地图另一端的道路,而在此之前是岩石,低地和其他风景。

– ?

, , .

, . , , 4 . , .


认识球!



这些是基础工人。 第一个注入了全部的魔力,第二个注入了完整的技术。 其中一个可以借助自己身上长出的水晶碎片,将水晶从沉积物中拖到其他石头上,然后将其运送到蚁丘中以备进一步使用。 第二种则使用技术工具和巨大的容器进行搬运。



但是球体所在的巢穴。 中心是基本varinat。 左边是发展成魔术,右边是发展成技术。 而且,在破坏和创造这两个分支上都有发展,因此它们看起来是如此不可或缺。 但是,正如您所知,情况并非总是如此。



这是混合巢。 钢支架和上方的魔晶? 为什么不呢 相反,我更喜欢与自然融为一体,但同时我想拥有一个供暖系统? 拜托



总共为游戏建模了6个对象(3个单位和3个建筑物)+ 4个修改(2个魔术,2个技术)。 the,没有足够的时间来准备照明装置和图腾。

所有修改的设计方式均使其一部分在破坏分支的发展过程中发生变化,而部分在创造分支的发生过程中发生变化。

因此,游戏在视觉上变得多样化。 您正在等待游戏中下一个射击场的抽水,就像假期一样,因为在此之后,您的所有单位都将进行转换,并且将更能体现其特征和您的游戏风格。

在Unity中,添加了以下内容-单位具有基本元素,例如,主体,此外,每个射击场(考虑到基本射击场)都具有指向相应图形元素的链接。 当某个单元出现在场景中时,将创建其基本部分,然后将所有必要的主体套件从资产添加到WorldObject结构。

通向世界的窗户


现在,游戏已经看起来像是一款游戏。 但仍然有一些事情尚未完成。 有一个世界,有生物沿着它移动,正在建造建筑物,正在开采资源。 进行战斗,赢得经验,比赛选择他们的发展道路。

玩家为何遭受苦难? 事实是,没有开发出足够的界面,HUD,这在游戏中通常被称为。

为了解决构建界面的任务,我最初收集了旧的和新的类似物-命令与征服,哥萨克人,魔兽争霸3,星际争霸2,战锤,Dota,大声笑-并开始分析组成元素。

游戏界面(以任何其他方式)应反映主角的当前位置和状态,并建议更改此状态的方法。 一般而言,这是资源的可用性,有关所选单位的信息(例如其位置,运行状况,可能的动作及其说明),小地图上所有单位的位置,暂停和离开游戏的能力。



在了解了重载者如何执行这些任务之后,我尝试组装自己的结构,以适应通常的用户模式,但占用最少的屏幕空间。

在古代,用于创建HUD的本地Unity工具只是一小部分元素,需要通过代码直接创建并放置在屏幕上。

在html + css上编写了漂亮的平滑自适应前端之后,它似乎绝对是最疯狂的狂热分子,但是您能做什么。 我必须进行调整,计算各种压痕,并不断考虑屏幕的宽度和高度。



将美感固定到这样的界面上是一项非常沉闷的任务,因此一开始就决定以中性颜色以平面形式执行它。

一旦抛出基础,就出现了为主要事件和其他界面元素创建大量图标的问题。

显然,在有限的时间范围内绘制所有内容完全是绝望的任务,我开始寻找替代方案。 我找到了一个很棒的项目-GameIcons,为独立游戏创建免费的简单图标。 在其中找到所有必需的组件,并组装了接口。

在开发过程中,创建小型地图的需求浮出水面。 我对Unity的功能有所了解,我在每个单元的顶部添加了一个相应大小的矩形,只有通过安装在整个区域上方的特殊摄像头才能看到该矩形。

微型地图准备就绪后,便希望单击它以发送长途旅行的部队,这一点我很快就意识到了。



值得一提的是,界面的一部分就是有关设备运行状况的信息的完全显示,所有这些信息都是从此开始的。 突出显示时,设备周围现在有一个圆圈,其颜色反映了该设备与您的关系:绿色-友好,黄色-中性,红色-敌对。 设备本身上方还会显示一个健康栏,该健康栏还会根据其数量更改颜色。

为了节省屏幕上的空间,已决定将所有单元的保健条做成一定长度(以便在抽水和抛光时,10,000 hp的保健条不会从屏幕边缘到边缘)。



与世界的互动并不止于此。 光标是了解世界状况和变化可能性的重要因素。 在网络上,它通常会变成一只脚来显示可以单击的元素,并变成可以选择的文本的笔架。

在游戏中,就像我们必须了解谁举手以及如何处理一样。 因此,在突出显示时,我们需要了解它是谁的单位,并且在移动到某个动作的状态(攻击,移动,生产)时,需要显示交互的可能性。

一旦所有基本动作都出现了,他们就想从键盘上执行它们以提高速度。 为此,我们添加了取决于玩家状态的键盘输入集。

并且,当然还有经验和练级树。



我们得到了关卡-抽水的特殊按钮点亮,一棵树打开。 它以绿色显示我们已经学到的东西,以黑色显示我们可以学到的东西,以红色显示我们不能学到的东西。



打开一定的射击范围后,我们会看到他对游戏所做的所有更改,然后我们决定是否要进行游戏。

是的,它看起来很笨拙,但这仅仅是个开始!

现在一切准备就绪,可以首次启动! 华友世纪远远落后于无穷无尽的开发选择空间。



剩下的只是添加开始屏幕-继续进行,探究Evenedium的惊人扩展。 哦,是的,我没说过,在加强头脑风暴之后,我们选择了这个名字?

奔腾

走吧


还有一些屏幕截图,供那些不想看上面视频的人使用。







Finita?


游戏的基本版本已准备就绪。

是的,它很简单,但这只是给我们一个理由,可以为下一步的开发创建出色的任务库-在这里,您会发现新的单位,战争迷雾,伴随着其生成器的能力,新的抽水分支,更多的可变性以及战役,以及多人游戏和获利...

是的,顺便说一句:我为自己辩护得很好,但这并不令我感到惊讶。 对于游戏的未来,我感到更加兴奋,我立即着手进行游戏的实现。

键盘在沸腾,又一个月我们在积极地写东西,突然,突然,我发现一年的发展已经过去了! 整整一年的时间里,我一直在研究这个充满想法的想法的创建过程,这个想法已经与同事们长满了,现在我们已经成为一个团队,我们拥有一个产品并且拥有光明的未来。 我们决定庆祝。

最后的提交开始以这样的职位见到每个人。



是的 最后一个。 看起来很奇怪,但正是在那一刻,最终为创建工作提供了大力帮助的家伙决定离开该项目。 他需要时间和精力,而他们还没有准备好。 他们没有在他身上看到前景或意义。

对我来说,这是一个惊喜。 令人反感,重击。

不会有长久的结论,为什么呢? 上面已经介绍了所有内容。

总的来说,我为实现自己的梦想创造了一个世界并将其带入这样的状态而感到自豪。

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


All Articles