ブログに戻る

Marathon Input Issues Fix: Overlay 競合に負けない PC ゲームのアーキテクチャ設計

公開日 2026年2月28日
Marathon Input Issues Fix: Overlay 競合に負けない PC ゲームのアーキテクチャ設計

対戦型マルチプレイヤーの開発者なら誰でも、Discord の overlay のせいで完璧に設計された netcode が台無しになる絶望感を知っています。サーバーインフラを 30ms 以下のレイテンシに最適化するために数ヶ月を費やしても、バックグラウンドのストリーミングアプリがゲームの input thread を圧迫しているせいで、プレイヤーの弾が当たらないという事態が起こるのです。

このシナリオは、Bungie の新作『Marathon』の Server Slam で実際に発生しています。PC プレイヤーからは深刻な mouse lag や入力落ちが報告されており、Bungie はサードパーティ製ユーティリティや overlay が原因であると公式に認めました。

現在、コミュニティでは多くのプレイヤーが marathon input issues fix を探しています。プレイヤー側の回避策は、ウィンドウキャプチャではなく画面全体をキャプチャし、overlay を無効にすることです。

しかし開発者にとっての課題は、なぜ overlay が入力をハイジャックするのか、そしてそれを防ぐために PC クライアントをどう設計すべきかという点にあります。

本記事では、Windows の入力処理メカニズムを分析し、OBS 等が frame pacing に問題を起こす理由と、input thread をデカップリングする方法を解説します。

根本原因:Overlay が Render Pipeline を乗っ取る仕組み

OBS や Discord は、ゲームプロセスに DLL をインジェクトし、DirectX の Present 関数や Vulkan の vkQueuePresentKHR をフックします。

Swap Chain のボトルネック

フックされた swap chain により、エンジンはフレームバッファのコピーが終わるまで待機を強いられます。16.6ms (60 FPS) で済むはずのフレームが 24ms かかるようになり、メインスレッドで行われる WM_MOUSEMOVE のポーリングも連鎖的に遅延します。

解決策:Raw Input API の採用

標準の Windows メッセージポンプに頼るのは、競技性の高いシューターでは致命的です。Raw Input API (WM_INPUT) を実装し、レンダリングループから完全に切り離された高優先度の専用スレッドでポーリングを行うべきです。

C++ (Win32) での Raw Input 実装

void InitializeRawInput(HWND hwnd) {
    RAWINPUTDEVICE Rid[1];
    Rid[0].usUsagePage = 0x01; 
    Rid[0].usUsage = 0x02; 
    Rid[0].dwFlags = 0;   
    Rid[0].hwndTarget = hwnd;
    RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]));
}

Unreal Engine:スムージングの無効化

Unreal Engine では、PlayerController で mouse smoothing を無効化し、フレームレート変動時の違和感を排除してください。

クライアントラグとサーバーロールバック

入力遅延はマルチプレイヤーにおいて深刻です。クライアントのループが停滞すると、サーバーへのパケット送信が遅れ、reconciliation によって rubberbanding が発生します。これは How To Fix Player Location Desync In Uefn And Unreal Engine Multiplayer で語られている現象に似ています。

horizOn を利用すれば、こうした同期問題に強い最適化済みのゲームサーバーを構築できます。

PC 入力における 5 つのベストプラクティス

  1. 入力とレンダリングの分離: 1000Hz で動作する独立スレッドで Raw Input を取得する。
  2. DXGI Flip Model の強制: DXGI_SWAP_EFFECT_FLIP_DISCARD を使用して DWM をバイパスする。
  3. ハードウェアカーソルの使用: UI テクスチャではなく OS レベルのカーソルを使用する。
  4. フック注入の警告: overlay DLL を検知した際にプレイヤーに通知する。
  5. Fixed Timestep Simulation: 物理と入力を固定時間ステップで処理する。

結論

開発者は Raw Input の実装とスレッドの分離を徹底すべきです。バックエンドの同期に関しては horizOn に任せ、クライアントの操作感の磨き上げに集中しましょう。

このダッシュボードは以下のチームによって愛情を込めて作られています Projectmakers

© 2026 projectmakers.de

unknown-v1.91.1 / unknown-v--