让恐怖民主化:Mega Cat Studios 如何为《弗雷迪的五夜后宫》带来了可及性

MEGA CAT STUDIOS / GUEST BLOGGuest
Apr 23, 2025
在《五夜惊魂》中的无障碍性:《陷入深渊》,由Mega Cat Studios_Unity客座博客文章
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

这篇博客文章由Madison Petrick撰写,她是Mega Cat Studios的用户体验和无障碍性总监。

在过去的10年里,五夜惊魂视频游戏系列以其高难度而自豪。从终极自定义之夜中一些最无情的挑战,到原版的五夜惊魂:20/20/20/20模式FNAF的粉丝们在各种游戏风格中多年来都敢于挑战自己,经过多次尝试最终成功。

但虽然这些标题的困难性质可以为许多人带来巨大的满足感,但对其他人来说,玩这些游戏的可行性可能是与在“噩梦模式”中躲避恐怖截然不同的挑战。

近年来,视频游戏中的无障碍性以指数级增长。曾经仅限于能够更改音量设置,最终演变为亮度调整、可重新映射的控制和生活质量的变化,比如在游戏首次启动时能够访问设置菜单。快进到2020年发布的顽皮狗的最后的生还者第二部,设定了一个新标准。这款2020年年度游戏有超过60个无障碍设置可供选择,投入了数百小时的研究和开发。

在我们最新发布的FNAF:陷入深渊我们收到了在游戏中添加无障碍功能的想法。我们的小团队没有数百小时来专注于研究,更不用说额外的“猫力”了。但我们所有的开发者都迎接了挑战,承担起各自负责开发某些无障碍方面的责任。无论这是研究、错误测试,还是在飞行中学习新的编码技巧并与我们的桌友分享,我们的动力是给每个人一个机会来玩 FNAF:进入深渊(以及大量的咖啡)推动我们向前。

将几个功能集成到最终构建的目标最终变成了20多个。虽然有些功能不幸未能通过,但我们为带给长期存在的 FNAF 特许经营的新资源感到自豪。

FNAF中的无障碍功能

五夜弗雷迪中可用的无障碍功能如下:进入深渊。注意:为了避免剧透,这些功能中的一些未显示!

颜色设置

玩家可以更改游戏的颜色对比度和整体亮度。

我们未能及时发布完整的达尔顿化(颜色对比)调整计划以配合游戏的发布,但我们确实实现了整体亮度和对比度。进行了大量的黑白比例模拟,以尽可能限制视觉对比或重叠。


在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
五夜弗雷迪中的无障碍:进入深渊_由Mega Cat Studios_Unity客座博客文章
四张显示五夜弗雷迪中亮度和对比度选项的图像:进入深渊

更改Unity的后处理体积的值只需几行代码,使玩家能够轻松自定义亮度和对比度级别。

FNAF中的无障碍:进入深渊_由Mega Cat Studios_Unity客座博客文章_后处理
后处理音量面板
if (mainCameraVolume.TryGet(out ColorAdjustments colorAdjustments))
            colorAdjustments.contrast.value = 
contrastValueCurve.Evaluate(value);

(ContrastHandler.cs)

生物、奇卡和世界噪音小插曲

每个穿越世界的NPC都有自己颜色的屏幕小插曲,以指示他们与玩家的接近,例如,“生物”的小插曲为黄色,“奇卡”的小插曲为紫色。世界周围的常规噪音,即噪音制造者,也有音频可视化,带有灰色的小插曲。

在接收可访问性反馈时,开发者希望确保进入深渊不仅依赖声音来提醒玩家潜在威胁。虽然添加了噪音小插曲以适应音频可访问性,但此功能也使那些更喜欢视觉游戏风格的人受益。此外,由于集成了脉动效果作为第二个接近指示器,以适应对比度和亮度设置,小插曲的设计不仅仅依赖于颜色。

来自《五夜惊魂》的场景:进入深渊_Unity客座博客文章 2025年4月
在上面的场景中,噪音小插曲将出现在“金色邦尼”角色接近玩家的屏幕侧面。
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
小插曲的外观取决于邦尼角色从哪个方向接近:如果邦尼从北方来,小插曲将出现在屏幕顶部;如果从南方接近,小插曲出现在底部;如果从西方来,小插曲出现在左侧;如果从东方接近,小插曲出现在右侧。
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
随着金色邦尼靠近玩家,小插曲变得更大且不那么透明。当邦尼靠近你时,小插曲的光辉增强。

这是Mega Cat Studio的首席开发者Matthew Wojtechko对音频可视化功能的解释:

“我大力推动确保我们可视化游戏中所有重要的声音。我们遍历了游戏,找出了三种噪音来源:黄色兔子的脚步声、奇卡的脚步声和杂项世界噪音。

我们在屏幕的一侧有一个脉动小插曲来指示黄色兔子在什么位置,但现在,我们必须整合另外两个类别。我们决定让这些以节奏脉动;黄色脉动代表兔子,粉色脉动代表奇卡,白色脉动代表其他任何东西。如果那个物品没有发出任何声音,那么那个“节拍”就只是空白。

实现这个功能的最大挑战是确定目标相对于奥斯瓦尔德的位置。这似乎是一个简单的问题,除了游戏在Unity中的3D空间实现方式与我们试图传达给玩家的现实不符。

让我们考虑奥斯瓦尔德站在安全室,而黄色兔子在储藏室的例子。虽然储藏室应该在安全室的左侧,但在场景视图中,我们可以看到这些房间实际上是反向实现的。在这种情况下,奥斯瓦尔德和黄色兔子的位置之间的简单比较并不可靠,因为玩家对地图的理解与游戏引擎中的现实不符。

这就是为什么如果奥斯瓦尔德和声音目标在不同房间,游戏会使用Unity NavMesh系统(我们已经用于敌人的AI)来确定最近的有效路径,并使用最能引导奥斯瓦尔德的门作为声音的方向。


五夜弗雷迪中的无障碍:进入深渊_由Mega Cat Studios_Unity客座博客文章
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
比较游戏视图和场景视图

通过这些教程了解更多关于Unity的AI导航系统:

OpenDyslexic

玩家不仅可以选择字体大小和间距,还可以选择专为阅读障碍者创建的字体,称为OpenDyslexic

通过使用OpenDyslexic,我们希望提高Into the Pit中几乎所有文本的可读性,以帮助阅读障碍者。尽管我们的默认文本在大小上是完全可定制的,但我们希望在这个选项上再增加一点,以提高可读性,因为游戏的文本基础类型。

OpenDyslexic字体:

在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章

默认字体:

在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章

单击一次

正常游戏/过场动画中的快速时间事件(QTE)将有一个选项,可以通过单击一次并无限时间来获胜。

通过此功能,快速时间事件可以通过单击按钮成功完成,而不依赖于时间。尽管“狂按按钮”在视频游戏行业中是一种常见做法,但这种运动控制选项可以帮助减少那些希望减少按钮疲劳的玩家的疲劳感。

自动隐藏迷你游戏

隐藏迷你游戏可以自动进行,无需玩家输入。

玩家不必依赖精细的运动控制来成功完成迷你游戏动作,因为这些动作可以自动执行。

下面的示例几乎没有区别,玩家在设置关闭(左)或开启(右)时的视觉体验,确保此功能在减少输入的同时仍能模拟出同样的悬念。

切换跑步

我们的切换跑步选项允许玩家在不按住按钮的情况下跑步,以帮助减少按钮疲劳。

玩家可以选择是否要按住他们选择的跑步按钮,或在游戏过程中通过按下跑步按钮开/关来切换他们的跑步。如果奥斯瓦尔德跑得足够接近门,他会自动通过门,同时在奔跑时允许无缝过渡(为了他的生命)。

游戏使用Unity的输入系统处理输入,这使得事件驱动的输入变得更加方便。我们判断玩家是否在跑步的逻辑在一个输入回调中,该回调考虑了辅助功能的当前设置:

public override bool OnRunInput(InputAction.CallbackContext ctx)
{
    if (ctx.started)
    {
        if (IsToggleRunEnabled())
            Oswald.isRunning = !Oswald.isRunning;
        else
            Oswald.isRunning = true;
    }
    else (ctx.canceled)
    {
        if (!IsToggleRunEnabled())
            Oswald.isRunning = false;
    }

    return Oswald.isRunning;
}

自动提示系统

自动提示系统为玩家提供了增加/减少对话提示频率的选项,直到分钟(即5分钟、10分钟、20分钟、关闭)。

不知道接下来该去哪里是任何玩家都感到沮丧的时刻,尤其是在到处查看地图或区域之后。在进入深渊中,玩家可以自定义奥斯瓦尔德掉落对话提示的频率,以帮助引导他们到下一个目标。这些提示是自动的,可以随时更改或切换开/关。

最初,提示系统以相同的频率开启,无法调整。然而,进入深渊的开发者知道一些玩家如果能更早收到提示会有更好的体验,而其他人可能不想要任何提示。

这是通过等待辅助设置指定的时间来实现的。当玩家收到新的目标时,计时器会重置。这次实现的重要之处在于确保开发者避免边缘案例的错误。这就是为什么在ShowHint函数中,开始时有几个保护性条款,以避免奥斯瓦尔德在不合适的时机自言自语。


protected void ShowHint()
{
    if (GameManager.Instance == null || 
        GameManager.Instance.Oswald == null || 
        GameManager.Instance.Oswald.IsStumbling ||
        InteractableDoor.isPlayerNearAnyDoor())
        return;

    if (AdventurePC.Instance && HintsManager.TryGetHint(out string hintText))
    {
        InvokeDelayed(new WaitUntil(() => TextBox.Instance), () =>
        {
            AdventurePC.Instance.Stop();
            messageTemplate.speaker = AdventurePC.Instance;
            messageTemplate.text = hintText;
            TextBox.Instance.overrideBlockerDelay = .25f;
            TextBox.Show(messageTemplate);
        });
    }

    UpdateCurrentQuestObjectives();
    ResetTimer();
}
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
角色奥斯瓦尔德在《进入深渊》中给出提示。

图标大小

图标可以放大或缩小。即使是最大的尺寸也不会遮挡游戏中的任何视图。

在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
游戏中的不同图标大小

立体声/单声道切换

玩家可以选择将声音设置为立体声(两个声道不同)或单声道(两个声道相同)。任何恐怖游戏中的声音设计不仅要让人感到不安,还要在游戏环境试图引导玩家时提供帮助。毕竟,知道“生物”可能潜伏在进入深渊的哪个地方对生存非常重要。

可重新映射的控制

玩家可以根据自己的喜好重新映射控制。控制与可访问性设备兼容,例如PlayStation®5 Access™控制器和Xbox自适应控制器。

我们的开发者利用Unity的新输入系统创建了进入深渊控制的可定制布局。输入系统,即使经过一些自定义代码编辑,也更适合拥有多个绑定,这些绑定在所有共享接口和用户界面菜单之间使用。由于集成了输入操作,这比我们之前的输入系统更容易管理,使输入对开发者来说更加有序和可定制。

“我们为玩家在游戏中可以做的每一件事都有一个输入操作,”马修·沃杰奇科说,“例如手电筒的操作、奔跑、移动、在迷你游戏中射击等。”当玩家重新绑定某个操作时,这会改变该操作的绑定。所有响应输入操作的其余代码保持不变,无论绑定是什么,因为输入操作将这些细节抽象化。

进入深渊有37个自定义输入操作。每个输入操作表示玩家可以执行的特定动作,并列出触发该动作所用的相应输入。例如,使用手电筒默认绑定在键盘的F键和控制器的左面按钮上。

调整输入绑定的便利性是相较于原始输入管理器的重大升级。在编辑器中修改它们很简单,而在运行时重新绑定更高效,尽管这需要一些代码。我们的重新绑定解决方案基于输入系统包中提供的示例,依赖于Unity的RebindingOperation类。

实现输入绑定菜单时出现的一个边缘案例是处理冲突输入。当玩家为已分配给另一个动作的输入提供输入时,就会发生这种情况。解决此问题的一种方法是让玩家分配冲突输入,但在他们解决问题之前(即,将两个相同输入的实例之一更改为其他内容)阻止玩家保存设置。虽然这是一种合理的方法,但在这种情况下我们选择简单地交换绑定。因此,如果手电筒是F,跑步是Shift,而玩家将手电筒绑定到Shift,那么跑步变为F。

使用输入系统在涉及其他代码时保持绑定信息的抽象。因此,既监听玩家输入的脚本也调整屏幕上输入图标的脚本都不处理特定输入,这有助于简化事情。

在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
两张显示进入深渊中输入操作列表的图片。
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
以及两段显示输入操作交换代码的代码片段。
在《五夜惊魂》中的无障碍性:进入深渊_由Mega Cat Studios_Unity客座博客文章
输入图标调整组件。

快速时间事件(QTEs)

进入深渊有两种类型的QTE自定义:在标准游戏玩法中提供简单QTE的选项,以及使隐藏迷你游戏自动化的选项。马修·沃伊捷科在最初实现隐藏迷你游戏时做了很多工作,当实现这个无障碍功能时,他知道可以以简单直接的方式做到这一点。

每个隐藏迷你游戏的独特机制都继承自一个共享的基类。这有一个标志 PlayAutomatic,用于检查保存数据,以查看玩家是否开启了此设置。以下代码已被简化:

public abstract class MechanicHidingMinigame
{
    public bool PlayAutomatic { get; protected set; }
    protected override void Awake()
    {
        PlayAutomatic = PlayerPrefs.GetInt(AccessibilityHandler.AUTO_HIDING_MINIGAMES_KEY) == 1;
    }
}

然后,每个隐藏迷你游戏脚本可以根据这个标志自动“播放”游戏。

例如,在需要屏住呼吸的迷你游戏中,我们在适当的时机控制呼吸系统:

public class BreathGameMechanics : MechanicHidingMinigame
{
    public void OnBonniePrepareLook()
    {
        if (PlayAutomatic)
        {
            BreathingSystem.Instance?.HoldBreath();
        }
        OnGoldBonnieAlmostLook?.Invoke();
    }

    public void OnBonnieEndLook()
    {
        isBonnieLooking = false;
        if (PlayAutomatic)
        {
            BreathingSystem.Instance?.ReleaseBreath();
        }
        OnGoldBonnieStopLooing?.Invoke();
    }

    // There rest of the code in this class was removed for clarity
}

可自定义的游戏风格

在游戏首次启动时,主菜单提供以下自定义选项。虽然我们知道大多数自定义选项通常是在以最难的五夜惊魂游戏通关后解锁的,但我们想通过在任何难度下通关后让玩家访问自定义选项来挑战这一标准。玩家可以自定义以下内容以获得更喜欢的游戏体验:

  • 自定义角色的攻击性。
  • 调整隐藏迷你游戏的难度。
  • 通过调整检查点频率来增加或减少游戏中的检查点数量。
  • 增加电池质量的选项,以延长手电筒电池的使用时间。
  • 增加或减少游戏中的隐藏点数量。
  • 增加或减少游戏中的噪音制造器数量。

在超级猫工作室,我们相信每个人都应该玩游戏,就像每个人都应该在五夜惊魂中被彻底吓到一样:进入深渊(或者不被吓到——有一个设置可以调整)。我们努力为所有项目带来卓越,这意味着为我们的支持社区和粉丝扩展我们的无障碍工具包。如果这意味着跳入游戏开发未知的球池,我们每次都会兴奋地跳入。

我们只希望它没有鬼魂。