文章链接在STEAM (本文包含设计侧,下面是技术侧)

嗨,每个人!像Survivor一样的东西可能看起来很简单,但每个奖励、统计、武器和建筑背后都有一个疯狂的设计决策数量。

我们已经写了关于Orcthal如何保持选择简单而又给予极限玩家足够探索的空间的文章。如果你对游戏设计、缩放、标签和平衡深度与可访问性感兴趣,请查看我们的文章。然而,这篇文章是关于我们如何在Unity中实现这些事情的。

如何在Unity中构建Orcthal的统计系统

Orcthal有许多互动统计,但我们希望玩家理解基本概念而不必阅读电子表格。以下是一个简化的Unity中构建该系统的视图。

内容存储在可脚本化的对象中

大部分游戏内容是数据驱动的。技能、奖励、装备、遗物、角色类别和标签存储在可脚本化的对象资产中。一个技能资产包含其基本伤害、冷却时间、标签、视觉参考和统计映射。奖励然后引用那些资产和标签,而不是依赖于名称或硬编码的列表。这样设计师可以添加和平衡内容而不必每次编辑战斗代码。

统计源分离

我们将统计分为几个源:

最终值 =
    基础值
    × 角色
    × 元数据
    × 运行奖励
    × 装备
    × 遗物
    × 传说奖励

同一源内的加值会被添加。不同源的值会被相乘。

例如,装备中的20%潜力和遗物中的20%会变成:

1.20 × 1.20 = 1.44

我们的CombatStats组件收集这些修改器并在构建改变时重新计算最终值。

这样就可以让装备、遗物、角色奖励和暂时的运行奖励都有意义。它们相互支持而不是消失在同一个巨大的加值桶中。

能力决定统计的含义

通用关键词如潜力、大小、持续时间和广播不自动修改同名的字段。

每个能力都明确地将这些统计映射到其自己的机制。

对于Goblin Dynamo,映射大致如下:

持续时间 -> 活动时间
潜力   -> 脉冲率
大小      -> 目标和缆绳范围
广播     -> 活动通道数量

对于投掷斧,潜力反而影响投掷斧返回另一次打击的机会。

这是由一个能力映射系统处理的。UI可以一致地说“潜力”,而能力决定潜力应该改善的哪个独特机制。

标签控制哪些能力受到影响

每个能力都有一个精确的身份标签,如Ability.ThrowingAxe。

它也可以有更广泛的标签,如:

技能.投射
技能.远程
技能.区域
技能.侏儒
角色.猎人

奖励使用这些标签作为过滤器。

一个全局奖励会影响所有能力。一个投射奖励会影响所有安装的投射能力。一个投掷斧奖励只会影响投掷斧。

当战斗需要一个统计时,它会要求在当前能力的背景下获取该统计:

stats.GetForAbility(statId, ability);

统计系统检查能力的精确标签、家族标签和亲和力,然后只应用匹配的加值。

同样的上下文被投射和持久效果保留,因此关键命中几率和生命吸收仍然使用正确的能力加值。

标签也过滤奖励

奖励选择系统检查玩家当前拥有的能力之前构建其奖励池。

一个投掷斧奖励不会出现而没有投掷斧。侏儒家族奖励在玩家拥有侏儒能力之前就不会可用。一个投射奖励可以出现当至少一个安装的能力具有投射标签时。

在牌片显示之前就会发生过滤。

这样我们就可以保持一个大奖励目录而不必每次都呈现给玩家无效的升级。

能力快照其值

大部分能力在激活时计算其有效值。

一个弹射飞镖可以快照其伤害、弹射数量、潜力、范围和目标设置。每个弹射飞镖从该激活时使用相同的值。

这样就可以防止临时修改器在攻击过程中结束时产生不一致的结果。它还使战斗日志和平衡报告更容易理解。

值如果确实需要在实时保持动态,可以仍然通过评估来评估,但这对于每个机制都是一个明确的决定。

结果

Unity的实现基于几个可重用的组件:

  • 可脚本化的对象存储内容。
  • CombatStats组合加值到源层。
  • 能力映射将通用关键词转换为独特的机制。
  • 标签提供精确和家族级别的过滤。
  • 奖励生成移除了不相关的选择。
  • 运行快照保持能力的一致性。

玩家只需选择“更多潜力”就可以获得有用的结果。

同时,对于任何想优化的人来说,可以将精确的能力奖励、家族标签、装备缩放、遗物缩放和传说奖励组合成一个更明确的构建。