ホラーの民主化:メガキャットスタジオが「ファイブナイツ・アット・フレディーズ」にアクセシビリティをもたらした方法

このブログ投稿は、メガキャットスタジオのUXおよびアクセシビリティディレクターであるマディソン・ペトリックによって書かれました。
10年間、フレディの五夜ビデオゲームフランチャイズは、その高い難易度を誇りに思っています。アルティメットカスタムナイトの中で最も容赦のない挑戦のいくつかから、元のフレディの五夜:20/20/20/20モード、FNAFファンは、さまざまなプレイスタイルから、これらのモードを打破し、何度も挑戦した後に最終的に成功することを自らに課してきました。
しかし、これらのタイトルの難しさは多くの人にとって大きな満足感をもたらす一方で、他の人にとっては、フレディの「ナイトメアモード」で恐怖を避けることとは全く異なる挑戦となることがあります。
近年、ビデオゲームにおけるアクセシビリティは指数関数的に成長しています。かつては音量設定を変更できることに限られていたものが、最終的には明度調整、再マッピング可能なコントロール、ゲームの初回起動時に設定メニューにアクセスできるような生活の質の向上に変わりました。2020年のノーティードッグのザ・ラスト・オブ・アス パートIIのリリースに進み、新しい基準が設定されました。この2020年のゲームオブザイヤーは、60以上のアクセシビリティ設定を選択でき、研究と開発に数百時間が費やされました。
私たちの最新のリリース、FNAF:穴の中へ、私たちはゲームにアクセシビリティ機能を追加するアイデアを持ちかけられました。私たちの小さなチームは、研究に数百時間を捧げる余裕はありませんでしたし、余分な「猫パワー」もありませんでした。しかし、私たちの開発者全員が挑戦に立ち上がり、それぞれがアクセシビリティのいくつかの側面を開発する責任を負うことにしました。これが研究、バグテスト、または新しいコーディング技術を即座に学び、それをデスクメイトと共有することであったとしても、私たちのモチベーションはすべての人にFNAFをプレイする機会を与えることでした。コーヒーの大量摂取が私たちを前進させました。
最終ビルドにいくつかの機能を統合することが目標となったものが、最終的には20以上になりました。残念ながらカットされた機能もありましたが、私たちは長年続いているFNAFフランチャイズに新しいリソースをもたらしたことを誇りに思っています。
FNAFのアクセシビリティ機能
Five Nights at Freddy’sで利用可能なアクセシビリティ機能は次のとおりです:Into the Pit。注意:これらの機能のいくつかはネタバレを避けるために表示されていません!
カラ―設定
プレイヤーはゲームの色のコントラストと全体の明度を変更できます。
ゲームの発売に間に合うように完全なダルトナイゼーション(色コントラスト)調整プランをリリースすることはできませんでしたが、全体の明度とコントラストは実装しました。視覚的なコントラストや重なりができるだけ制限されるように、多くのシミュレーションが白黒スケールで実行されました。


Unityのポストプロセッシングボリュームの値を変更するには、数行のコードが必要で、プレイヤーが明度とコントラストレベルをカスタマイズするのが簡単です。

if (mainCameraVolume.TryGet(out ColorAdjustments colorAdjustments))
colorAdjustments.contrast.value =
contrastValueCurve.Evaluate(value);
(ContrastHandler.cs)
クリーチャー、チカ、そしてワールドノイズビネット
各ワールドを旅するNPCは、プレイヤーに近づくときに自分の色付き画面ビネットを持っています。例えば、「クリーチャー」は黄色、「チカ」は紫です。世界中の一般的なノイズ、つまりノイズメーカーも、灰色のビネットを持つオーディオ可視化があります。
アクセシビリティフィードバックを受け取った際、開発者はInto the Pitがプレイヤーに脅威を警告するために音だけに依存しないようにしたいと考えました。ノイズビネットはオーディオアクセシビリティに対応するために追加されましたが、この特徴はより視覚的なプレイスタイルを好む人々にも利益をもたらします。さらに、ビネットは色依存だけでなく、コントラストと明度設定に対応するための二次的な近接インジケーターとしてパルス効果の統合により設計されています。



ここで、Mega Cat Studioのリード開発者であるマシュー・ウォイテコがオーディオ可視化機能を説明しています:
「私はゲーム内のすべての重要な音を可視化するために大きな推進をしました。私たちはゲームを通じて、3つのノイズのソースを考え出しました:黄色のウサギの足音、チカの足音、そして雑多な世界のノイズ。
画面の側にパルスビネットを持って、黄色のウサギがどの側にいるかを示しましたが、今は他の2つのカテゴリを組み込む必要がありました。これらをリズムでパルスさせることに決めました。ウサギには黄色のパルス、チカにはピンクのパルス、その他には白のパルスです。そのアイテムがノイズを出していなければ、その「ビート」はただの空白になります。
この機能を実装する上での最も難しい課題は、ターゲットがオズワルドに対してどの側にいるかを判断することでした。これは単純な問題のように思えますが、Unityの3D空間でゲームが実装された方法が、プレイヤーに伝えようとしている現実と一致しないという事実があります。
オズワルドがセキュリティルームに立っている間、黄色のウサギがストレージルームにいる例を考えてみましょう。ストレージルームはセキュリティルームの左側にあるはずですが、シーンビューではこれらの部屋が実際には逆方向に実装されていることがわかります。この場合、オズワルドと黄色のウサギの位置を単純に比較することは信頼できません。なぜなら、プレイヤーのマップの理解がゲームエンジンの現実と一致しないからです。
そのため、オズワルドと音のターゲットが異なる部屋にいる場合、ゲームはUnityのNavMeshシステムを使用して最も近い有効な経路を決定し(これは敵のAIにも使用しています)、オズワルドに最も適した方向として音の方向を使用します。


これらのチュートリアルでUnityのAIナビゲーションシステムについてもっと学びましょう:
OpenDyslexic
プレイヤーはフォントサイズや間隔だけでなく、OpenDyslexicとして知られるディスレクシアの読者のために特別に作成されたフォントを選択できます。
OpenDyslexicを利用することで、ディスレクシアのあるプレイヤーのためにInto the Pitのほぼすべてのテキストの可読性を向上させることを期待しました。私たちのデフォルトテキストはサイズを完全にカスタマイズ可能ですが、ゲームの非常にテキストベースのジャンルのために、可読性を高めるためにこのオプションにもう少し追加したいと考えました。
OpenDyslexicフォント:

デフォルトフォント:

シングルタップ
通常のゲームプレイ/カットシーンのクイックタイムイベント(QTE)は、無限の時間でシングルタップで勝てるオプションがあります。
この機能により、クイックタイムイベントはボタンのシングルタップだけで成功でき、時間に依存しません。「ボタンマッシュ」はビデオゲーム業界で一般的な慣行ですが、このモーターコントロールオプションは、望むプレイヤーのボタン疲労を軽減するのに役立ちます。
自動で隠れるミニゲーム
ミニゲームを隠すことは、プレイヤーの入力なしで自動的に進行できます。
プレイヤーは、ミニゲームのアクションを成功裏に完了するために、細かいモーター制御に頼る必要はありません。これらは自動的に実行できます。
以下の例は、設定がオフ(左)またはオン(右)の場合、プレイヤーの視覚体験にほとんど違いがないことを示しており、この機能が少ない入力で同じようにサスペンスを模倣することを保証します。
ランのトグル
私たちのトグルランオプションは、プレイヤーがボタンを押さずに走ることを可能にし、ボタン疲労を軽減します。
プレイヤーは、選択したランボタンを押し続けるか、ゲームプレイ中にランボタンをオン/オフして走るかを選択できます。オズワルドは、ドアに近づいて走ると自動的に通過し、走っている間にシームレスな移行を可能にします(命のために)。
ゲームはUnityのInput Systemを使用して入力を処理し、イベント駆動型の入力を促進します。プレイヤーが走っているかどうかを判断するためのロジックは、1つの入力コールバックにあり、アクセシビリティ機能の現在の設定を考慮に入れています:
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分、オフ)。
次にどこに行くべきかわからないことは、特にマップやエリアをすべて見た後のプレイヤーにとっては挫折の瞬間です。Into the Pitでは、プレイヤーはオズワルドが次の目的地に導くために落とす対話ヒントのレートをカスタマイズできます。これらのヒントは自動的で、いつでも変更またはトグルオン/オフできます。
元々、ヒントシステムは同じレートでオンになっており、調整できませんでした。しかし、Into the Pitの開発者は、いくつかのプレイヤーがそのヒントを早く受け取ることでより良い体験を得られることを知っていましたが、他のプレイヤーは何も欲しくないかもしれません。
これは、アクセシビリティ設定で指定された時間を待つことによって実装されています。プレイヤーが新しい目的を受け取ると、タイマーがリセットされます。この実装で重要なことは、開発者がエッジケースのバグを避けることを確認することでした。これが、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();
}

アイコンサイズ
アイコンはサイズを大きくしたり小さくしたりできます。最大サイズでも、ゲームの視界を妨げることはありません。

ステレオ/モノトグル
プレイヤーは音をステレオ(両側が異なる)またはモノ(両側が同じ)にすることを選択できます。ホラーゲームの音は、不安を煽るだけでなく、ゲーム環境がプレイヤーを導こうとする際に役立つように設計されています。結局のところ、「クリーチャー」がInto the Pitのどこに潜んでいるかを知ることは、生存にとって非常に重要です。
再マッピング可能なコントロール
プレイヤーは自分の好みに合わせてコントロールを再マッピングできます。コントロールは、PlayStation®5 Access™ コントローラーやXbox Adaptive Controllerなどのアクセシビリティデバイスと互換性があります。
私たちの開発者は、Unityの新しいInput Systemを利用して、Into the Pitのコントロール用のカスタマイズ可能なレイアウトを作成しました。Input Systemは、いくつかのカスタムコードの編集があっても、すべての共有インターフェースとUIメニュー間で利用される複数のバインディングを持つのに適していました。これは、Input Actionsの統合により、以前の入力システムよりも管理が容易でした。これにより、入力がより整理され、開発者にとってカスタマイズ可能になりました。
「私たちは、プレイヤーがゲーム内でできるすべてのためのInput Actionを持っています」とマシュー・ウォジェチコは言います。「フラッシュライト、走ること、移動すること、ミニゲームでの射撃などのアクションがあります。」プレイヤーが何かを再バインドすると、それがアクションのバインディングを変更します。Input Actionsに応答する残りのすべてのコードは、バインディングが何であれ同じままであり、Input Actionsがそれらの特定の内容を抽象化します。
Into the Pitには37のカスタムInput Actionsがあります。それぞれは、プレイヤーが実行できる特定のアクションを示し、それをトリガーするために使用される対応する入力をリストします。例えば、懐中電灯の使用はデフォルトでキーボードのFキーとコントローラーの左フェイスボタンにバインドされています。
入力バインディングを調整する容易さは、元の入力マネージャーからの大きなアップグレードです。エディターでそれらを修正するのは簡単で、ランタイムでの再バインディングはより効率的ですが、いくつかのコードが必要です。私たちの再バインディングソリューションは、UnityのRebindingOperationクラスに依存するInput Systemパッケージに提供された例に基づいています。
入力バインディングメニューを実装する際に発生するエッジケースの1つは、競合する入力を処理することです。これは、プレイヤーが別のアクションにすでに割り当てられているアクションに入力を提供する場合に発生します。これを解決する1つのアプローチは、プレイヤーに競合する入力を割り当てさせることですが、問題を解決するまで設定を保存できないようにすることです(つまり、同じ入力の2つのインスタンスの1つを別のものに変更すること)。これは合理的なアプローチですが、この場合は単にバインディングをスワップすることにしました。したがって、懐中電灯がFで、走るがShiftで、プレイヤーが懐中電灯をShiftにバインドすると、走るはFになります。
Input Systemを使用すると、他のコードに関してバインディング情報が抽象化されます。したがって、プレイヤー入力をリッスンするスクリプトも、画面上の入力アイコンを調整するスクリプトも、特定の入力を扱わないため、物事が簡単になります。





クイックタイムイベント(QTE)
Into the Pitには、2種類の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
}
カスタマイズ可能なプレイスタイル
ゲームの初回起動時にメインメニューで次のカスタマイズが提供されます。ほとんどのカスタマイザーは、最も難しいFive Nights at Freddy’s ゲームをクリアした後に伝統的にアンロックされることを知っていましたが、私たちはプレイヤーがどの難易度でもゲームを一度クリアした後にカスタマイザーにアクセスできるようにすることで、その基準に挑戦したいと考えました。プレイヤーは、好みのプレイスタイル体験のために次のことをカスタマイズできます:
- キャラクターの攻撃性をカスタマイズします。
- 隠れミニゲームの難易度を調整します。
- チェックポイントの頻度を調整することで、ゲーム内のチェックポイントの数を増減させます。
- 懐中電灯のバッテリーの持続時間を延ばすバッテリー品質を向上させるオプション。
- ゲーム内の隠れ場所の数を増減させます。
- ゲーム内のノイズメーカーの数を増減させます。
メガキャットスタジオでは、誰もがゲームをプレイする権利があると信じています。誰もがFive Nights at Freddy’s:で徹底的に驚かされる権利があるように。ピットに飛び込む(または驚かされないように – そのための設定があります)。私たちは、すべてのプロジェクトに卓越性をもたらすことを目指しており、それは私たちの支援的なコミュニティとファンのためのアクセシビリティツールキットを成長させることを意味します。そして、それがゲーム開発の未知のボールピットに飛び込むことを意味するなら、私たちは毎回ワクワクして飛び込みます。
私たちはただ、それが幽霊に取り憑かれていないことを願っています。
