Among UsのホストMOD開発では、会議終了後に画面が暗転したまま進行不能になる問題が発生することがあります。特にTown Of Hostをベースに独自役職や機能を追加している場合、会議処理やゲーム状態の切り替え処理が正常に完了していないことが原因になるケースが多くあります。
この記事では、Among UsのMOD制作で会議後に暗転して操作不能になる原因を切り分ける方法や、確認すべき処理、修正時のポイントについて解説します。
Among Usの会議後暗転フリーズが発生する主な原因
会議終了後の暗転状態は、Among Us内部で次のゲームフェーズへ移行できていない状態で発生します。
通常は会議終了後に投票結果処理が行われ、その後プレイヤーの移動可能な状態へ戻ります。しかしMOD側の処理で例外が発生したり、必要なイベントが途中で停止すると画面が暗いまま進行しません。
Town Of Host系MODでは多数の役職処理やイベントフックが追加されるため、標準状態では問題なくても追加したコードによって会議終了処理が止まることがあります。
まず確認したいログとエラー内容
原因調査では、暗転する直前に発生しているエラーを確認することが重要です。
C#でMODを作成している場合、BepInExなどのログファイルに例外エラーが出力されていないか確認します。
例えば以下のようなエラーが出ている場合は、会議後処理中に参照しているデータが存在しない可能性があります。
NullReferenceException: Object reference not set to an instance of an object
この場合、役職情報やプレイヤー情報を取得するタイミングが早すぎる、または対象がすでに削除されているなどの問題が考えられます。
役職処理が会議終了イベントに干渉していないか確認する
Town Of Hostでは、役職ごとに会議開始時や会議終了時へ処理を追加できます。
そのため、新しく追加した役職が原因の場合は、会議終了イベントに登録している処理を確認する必要があります。
例えば、以下のような処理を追加している場合は注意が必要です。
- 会議終了時にプレイヤー状態を変更する処理
- 投票結果を変更する処理
- 役職固有の勝利判定処理
- 死亡や復活処理
- RPC通信を発生させる処理
これらの処理で例外が発生すると、通常のゲーム復帰処理まで到達できず暗転状態になることがあります。
メイヤー役職が原因の場合に確認するポイント
メイヤーなど投票数を変更する役職は、会議処理に直接関係するため原因候補になることがあります。
ただし、メイヤーだけが原因とは限らず、投票結果を書き換える処理や会議終了後の勝利判定処理全般を確認する必要があります。
切り分け方法としては、一度メイヤー関連コードを無効化してテストし、暗転問題が解消するか確認すると原因箇所を絞り込めます。
デバッグで原因を特定する方法
MOD開発では、一度に複数の変更を入れると原因特定が難しくなります。そのため、追加した機能を一つずつ無効化して確認する方法が有効です。
例えば以下のような手順で調査できます。
- 新しく追加した役職をすべて無効化する
- 会議終了後に正常復帰するか確認する
- 役職を1つずつ有効化する
- 暗転が発生した役職の処理を確認する
また、会議終了イベントの開始時と終了時にログを追加すると、どの処理で停止しているのか確認しやすくなります。
RPCや同期処理によるフリーズにも注意
Among UsのMODでは、ホスト側とクライアント側の同期処理が重要です。
会議後にRPC通信を実行している場合、その通信処理が失敗するとゲーム状態が一致せず進行不能になることがあります。
特に以下のような処理では注意が必要です。
- 存在しないプレイヤーIDへのアクセス
- 死亡済みプレイヤーへの処理
- 会議終了直後のRPC送信
- ホスト以外でも実行される処理
Town Of HostベースMODで安定させるためのポイント
Town Of HostをベースにMODを作成する場合は、既存のイベント処理の流れを理解してから追加機能を実装することが重要です。
特に会議関連はゲーム進行に直結する部分なので、役職処理を追加するときは会議開始、投票中、会議終了後のどのタイミングで実行するかを明確にする必要があります。
また、処理の中で例外が発生してもゲーム全体が停止しないよう、必要に応じて例外処理を追加するとデバッグしやすくなります。
まとめ
Among UsのTown Of Host系MODで会議後に暗転したまま動かなくなる場合、原因はメイヤーだけではなく、会議終了処理に干渉する役職コードや同期処理にある可能性があります。
まずはログでエラーを確認し、追加した役職やイベント処理を一つずつ無効化して原因を切り分けることが重要です。
特に会議終了後の処理、RPC通信、勝利判定、プレイヤー状態変更などはフリーズ原因になりやすいため、処理タイミングを確認しながら修正すると安定したMOD開発につながります。


コメント