プラットフォームとしての Xbox は進化を遂げ、コンソールから Xbox on PC、スマート テレビ、ストリーミング デバイス、モバイル デバイス、Webブラウザーに至るまで、あらゆる画面でプレイヤーを迎え入れるようになりました。 これには、バッテリー駆動の数百万台のゲーム機も含まれています。 これらの取り組み全体については、https://aka.ms/sustainablegamedev を参照してください。
ゲーム開発者が新たに登場した Windows ハンドヘルド向けにゲームを最適化するために役立つ、有用な記事やハブ ページを以下にご紹介します。
- ハンドヘルドとの互換性 (https://aka.ms/hhcompatguide)。 ポータブル型、タッチ操作対応、ゲーム パッド主体のデバイス向けに、高品質なゲーム体験を構築するためのガイド、ツール、サンプルをご紹介します。
- ハンドヘルドのパフォーマンス (https://aka.ms/hhperfguide)。 このシリーズでは、モバイル デバイス上でゲームを長時間かつ高速に動作させるために、開発者が実践できるシンプルな手法を紹介しています。
この記事および関連リソースは、https://aka.ms/xboxhhdev で告知される予定です
ゲーム内設定の最適化
ゲーム内の設定が重要な理由
シリーズの概要 (https://aka.ms/hhperfintro) で説明したように、ゲーム内設定は、開発者がバッテリー駆動デバイス上でゲームの動作をより効率的に制御するための、最初の手段です。 プレイヤーがストアで Xbox on PC ゲームを閲覧すると、通常は既定となっている最も一般的なゲーム設定を使用した場合に、プレイヤーのデバイスが 30FPS 以上でゲームを実行できると判断されれば、製品詳細ページ (PDP) に Performance Fit 機能による推奨情報が表示されます。
図 1 - Xbox on PC ストアにおけるゲームの製品詳細ページ (PDP) の例。 「黄色で強調表示された四角形は、Performance Fit による推奨情報の表示位置を示しています。
この取り組みの目的は、開発者が簡単に設定できる既定のゲーム設定を Windows ゲーミング ハンドヘルドで利用できるようにし、プレイヤーにとって魅力的な初回体験を実現することです。
- はい、これは PC です。 Windows ゲーミング ノート PC と同様に、ハンドヘルド ゲーミング デバイスも携帯可能な PC です。 これらのデバイスはタッチスクリーンを搭載し、パフォーマンスと稼働時間のバランスを取るために、複数の電力モードでバッテリー駆動が可能です。
- しかし、これはただの PC ではありません。 Windows ゲーミング ノート PC と違い、ハンドヘルド ゲーミング PC はバッテリーで長時間ゲームをプレイできることが期待されており、それを支えるスマートなゲーム設定が必要です。 ハンドヘルド PC にはキーボードやマウスが搭載されていない場合があるため、Xbox on PC の体験からゲーム ランチャーの操作、ゲーム中に表示されるすべてのプロンプトに至るまで、すべての UI 階層でコントローラー操作に対応する必要があります。 また、ゲームは、プレイヤーの利便性やアクセシビリティを高めるために、タッチ操作へのネイティブ対応を備えることで大きな効果が期待されます。
ゲーム内設定に関する主な推奨事項は何ですか?
この記事の要点と各セクションの概要を以下に示します。
- Windows ゲーミング ハンドヘルドでスムーズに動作するよう、ゲームを調整しましょう。 これは、開発者がバッテリー駆動のデバイス向けに設定を検証・作成することを意味します。 これらの設定は、バッテリー寿命を延ばすためにゲームの処理負荷を調整する必要がありますが、ゲームプレイやアートスタイルを損なうことなく実現される必要があります。 開発者は、ROG Ally などの市場を代表する省電力性に優れたハンドヘルド上で、これらの設定をテストする必要があります。
- ハードウェアの自動検出とゲーム内設定の自動適用機能を実装します。 一部のゲームではすでにこの機能が実装されていますが、開発者は、ハードウェア性能に応じて適切な初期設定を行うために、ゲーム内のどの設定項目がマッピング可能かを検討する必要があります。
- まずは ROG Xbox Ally と ROG Xbox Ally X を参考にするとよいでしょう。 これらのデバイスは、Xbox と ASUS が共同で提供する設定最適化機能に対応した、最初の Windows ゲーミング ハンドヘルドです。
ガイドライン | ハードウェアの自動検出とゲーム内設定の自動適用の実装
開発者が検出コードを簡単に自分のゲームに組み込めるよう、ネイティブ C++ のサンプル (https://aka.ms/hhexpsample) と Unity 用のマネージド C# のサンプル (https://aka.ms/hhexpsample_unity) を提供しています。 これらのコードスニペットを使用することで、デバイスに搭載されたハードウェアの性能や機能に関する情報を取得できます。 その後、開発者はこれらの機能を活用して、幅広いデバイスに対応可能な合理的な初期設定を作成できます。
ROG Xbox Ally および ROG Xbox Ally X を例に、コードスニペットから取得される値と、それらの値が記載されている C++ サンプル コードへのリンクを以下に示します。 表の下部に記載された、アスタリスク (*) 付きの項目とその説明をご確認ください。
| コンポーネント | ROG Xbox Ally (2025)* | ROG Xbox Ally X (2025) | 注意 |
|---|---|---|---|
| IsHandheld (IsDeviceHandheld.cpp) | TRUE | TRUE | このフラグは、OEM が製品を Windows ゲーミング ハンドヘルドとして識別されることを希望する場合に設定されます。 |
| BaseBoard 製品名* (GetDeviceOEMInfo.cpp) | RC73XA | RC73YA | この SMBIOS フィールドは、OEM によって設定され、Windows ゲーミング ハンドヘルドとして設計された SKU を区別する目的で使用されることがあります。 |
| CPU (Processor.cpp) | AMD Ryzen Z2 A | AMD Ryzen AI Z2 Extreme | GPU に加えて、ハードウェア種別を判別するための初期識別情報として使用される可能性が高い項目です。 |
| GPU (GetGPUInfo.cpp) | ベンダー ID: 1002 製品 ID: 150E |
ベンダー ID: 1002 製品 ID: 163F |
GPU の VID/PID は、ハードウェアの性能レベルを示す最も包括的な指標のひとつです。 |
| メモリ構成*** (GetMemoryInfo.cpp) | 合計メモリ: 16 GB 専用 VRAM: 6 GB (合計 16 GB から共有) |
合計メモリ: 24 GB 専用 VRAM: 8 GB (合計 24 GB から共有) |
テクスチャ サイズやキャッシュ マップの選定などの判断に役立ちます。 |
| 画面解像度 (GetDeviceResolutionAndRefresh.cpp ) | 1920 x 1080 | 1920 x 1080 | デバイスのネイティブ解像度に設定すると、他の設定が最適化されていない場合、画質が向上する一方でパフォーマンスが低下する可能性があります。 |
- "*" = VRAM の割り当てはユーザーが選択できます。 これらは既定値ですが、保証されるものではなく、ベースラインのプロファイリング計算に使用する参考例です。
- "**" = このデバイスに推奨される既定の解像度は 720p です。 開発者は、ゲームに最適な動作を得るために各種設定を検証し、その結果に基づいて適切に調整する必要があります。 さらに、一部のゲーム固有設定では、ゲームに通知される画面解像度を上書きすることで、テストにより高解像度では 30FPS を下回ることが確認された場合の動作効率を改善できます。ただし、この設定はプレイヤーによって変更可能です。
- "***" = DirectX ゲームの場合、ゲームに割り当てるビデオメモリ量を動的に判断するために、QueryVideoMemoryInfo の使用が推奨されています。 GetMemoryInfo.cpp の例で使用されている (GlobalMemoryStatusEx) メソッドは、ゲームのメモリ使用状況を別の観点から把握する必要がある場合の補完的な手段です。
UI/スケーリング設定に関する重要な注意事項。 画面解像度に応じた調整を行うことで、特に小型画面ではゲーム内 UI の視認性が低下する場合があります。 画面サイズやブレークポイントに関する一般的なアプリ設計ガイドラインは、ゲームデザインの参考資料として有用です。詳細は https://learn.microsoft.com/windows/apps/design/layout/screen-sizes-and-breakpoints-for-responsive-design をご覧ください。
ガイドライン | 静的なゲーム内設定の作成
静的なゲーム内設定では、電源状態が最後に確認された時点の、単一の電源状態におけるハードウェア構成のみが考慮されます。 静的なゲーム内設定を作成するには、まずフレーム レートなどの客観的な指標を目標として定める必要があります。
プレイヤーの期待
ゲームは快適に動作するために必要な条件を把握しており、既定では、1080p/30fps (例: ROG Xbox Ally X) または 720p/30fps (ROG Xbox Ally) の性能を確保するための最適な設定が適用されます。
テスト手順
- バッテリー駆動時にテストを実施します。 ハンドヘルド ユニットにゲームをインストールし、バッテリーが完全に充電された状態で電源に接続せず、既定の設定で起動してください。
- 起動時と、アセットの読み込みおよび I/O 処理が安定した後の両方のタイミングで、FPS メーターを使用してパフォーマンスを監視してください。 Windows + G キーを押して Windows Game Bar の FPS メーターにアクセスするか、PresentMon を実行して FPS をリアルタイムで記録・追跡してください (詳細は GitHub プロジェクトをご参照ください)。
- 最小 FPS と平均 FPS の設定を比較・検討の中心とします。 FPS が少なくとも 1080p30 (例: ROG Xbox Ally X または同等のハードウェア) または 720p30 (例: ROG Xbox Ally または同等のハードウェア) で安定して実行されるまで設定を調整します。
- 高性能ハードウェア構成および省電力構成の両方に対応したゲーム内設定のライブラリを作成します。 これらの設定は、将来的に異なるデバイスでテストを行い、ROG Xbox Ally や ROG Xbox Ally X などのさまざまなハードウェア SKU における理想的な設定を検証するために保存しておきます。
予想される結果 Windows ゲーミング ハンドヘルドの高性能モデル (例: ROG Xbox Ally X) と省電力モデル (例: ROG Xbox Ally) の両方で安定したフレームレートを維持できる、同等の効果を持つゲーム内設定を少なくとも 2 件作成または取得します。
ガイドライン | 動的なゲーム内設定の作成
動的なゲーム内設定は、静的な設定に比べて粒度が高く、より細かい制御が可能です。 これらは、電源接続時またはバッテリー駆動時の少なくとも 2 つの電源状態に対応しており、ゲーム実行中に電源モードの変更イベントに対応可能であることが望まれます。
プレイヤーの期待
特に Windows ゲーミング ハンドヘルドでは、電源接続とバッテリー駆動を頻繁に切り替えるため、ゲームにはパフォーマンスとバッテリー寿命の両方を可能な限りバランスよく維持することが求められます。ゲームは快適に動作するために必要な条件を把握しており、既定では 1080p/30fps (例: ROG Xbox Ally X) または 720p/30fps (例: ROG Xbox Ally) の性能を確保するための最適な設定が適用されます
テスト手順
- バッテリー駆動時にテストを実施します。 ハンドヘルド ユニットにゲームをインストールし、バッテリーが完全に充電された状態で電源に接続せず、既定の設定で起動してください。
- 起動時と、アセットの読み込みおよび I/O 処理が安定した後の両方のタイミングで、FPS メーターを使用してパフォーマンスを監視してください。 Windows + G キーを押して Windows Game Bar の FPS メーターにアクセスするか、PresentMon を実行して FPS をリアルタイムで記録・追跡してください。
- 最小 FPS と平均 FPS の設定を比較・検討の中心とします。 FPS が少なくとも 1080p30 (例: ROG Xbox Ally X または同等のハードウェア) または 720p30 (例: ROG Xbox Ally または同等のハードウェア) で安定して実行されるまで設定を調整します。
- 高性能ハードウェア構成および省電力構成の両方に対応したゲーム内設定のライブラリを作成します。 これらの設定は、将来的に異なるデバイスでテストを行い、ROG Xbox Ally や ROG Xbox Ally X などのさまざまなハードウェア SKU における理想的な設定を検証するために保存しておきます。
- 検出方法を実装します。 以下の「動的プリセット検出」セクションをご参照ください。
予想される結果 ゲームの起動時または電源モード変更の通知を受けた際に適用される、最大で 4 件のゲーム内設定を作成または取得します。 これらのゲーム内設定は、Windows ゲーミング ハンドヘルドの高性能モデル (例: ROG Xbox Ally X) および省電力モデル (例: ROG Xbox Ally) に対応するだけでなく、各デバイスが電源接続とバッテリー駆動を頻繁に切り替える状況においても、電源接続時とバッテリー駆動時の両方の状態に対応します。
ガイドライン | ハードウェアの電源状態を検出する
- 動的 (推奨): タイトルが、既知の Power Setting GUID のいずれかを使用して RegisterPowerSettingNotificiation API により電源スキーム/プロファイルの変更通知を受け取るよう登録している場合、追加の WM_POWERBROADCAST メッセージが送信されます。このメッセージでは、WPARAM の値が PBT_POWERSETTINGCHANGE に設定され、LPARAM 値には追加の詳細情報が含まれます。 たとえば、GUID_POWERSCHEME_PERSONALITY を登録すると、システムの電源プランが、例として「バランス」から「高パフォーマンス」へ変更された際に通知が送られます。 GUID_ACTIVE_POWERSCHEME を使用すると、電源プロファイルが変更された際に通知が送信されます。 GUID_ENERGY_SAVER_STATUS を使用すると、デバイスがバッテリー/省電力モードに移行した際に通知が送信されます。
- 静的: サンプルに示すように、デバイスを手動で照会することで、電源に接続されているかバッテリー駆動かを簡単に判定できます。
サポート | Windows ゲーミング ハンドヘルド向けのゲーム設定を最適化する方法についてご不明な点がある場合は、どこに問い合わせればよいですか?
以下のリソース概要に加えて、ID@Xbox などの Xbox 開発者プログラムに参加している開発者は、フォーラム (https://forums.xboxlive.com – 有効な NDA アカウントでのサインインが必要) にて交流いただくことを推奨しています。また、すべての開発者は Microsoft Game Dev Discord サーバー (https://discord.gg/msftgamedev) を通じて Microsoft と情報交換することができます。
- Microsoft Game Dev ハンドヘルド開発ハブ: https://developer.microsoft.com/games/resources/handheld-development/
- Microsoft Windows ゲーミング ハンドヘルド向けコード サンプル: https://developer.microsoft.com/games/articles/2025/07/windows-gaming-handheld-code-samples/
- Microsoft Game Dev Discord:https://discord.gg/msftgamedev
- Microsoft NDA 開発者フォーラム: https://forums.xboxlive.com ("ハンドヘルド" タグを使用すると、該当分野の専門担当者にリクエストが振り分けられます)