MonoGame デスクトップゲームを Microsoft Store に公開する:完全な MSIX および WAP ガイド
Windows 10 および Windows 11 の Microsoft Store にインディーゲームを公開することは、世界中の何億人もの PC ゲーマーへの直接的なアクセス、バックグラウンドでの自動アップデート、Windows Game Bar との統合、コンテナ化されたインストール環境による安全性をもたらします。しかし、ゲームが MonoGame(.NET 8.0 または .NET 9.0 WindowsDX)で構築されている場合、ストアへの配信には伝統的な Win32 実行ファイル(.exe)を最新の MSIX / AppX アプリケーションモデルへ橋渡しするアーキテクチャが必要です。
Arar Games では、Paint Trek および Blocked: Pixel Panzer の開発を通じて、初期ビルドからストアでの本番公開に至るまでの全プロセスを確立しました。本ガイドでは、プロジェクトの構成、Visual Studio の Publish メニューオプションの理解、Package.appxmanifest の設定、タイルアセットの解像度スケーリング、Windows アプリ認定キット(WACK)の検証対応、そして Microsoft Partner Center への提出に至る実践的なノウハウを徹底解説します。
1. アーキテクチャの基礎:Win32 と MSIX の比較
MonoGame ゲームは通常、Win32 実行可能ファイル、ランタイムライブラリ(.dll)、およびコンパイル済みコンテンツ(.xnb テクスチャ、.ogg 音声、シェーダー)を含む Content/ フォルダとしてビルドされます。
Windows アプリケーション パッケージ化(WAP) プロジェクトを使用してゲームを MSIX bundle にカプセル化することで、以下のメリットが得られます:
- 分離された安全なライフサイクル: MSIX アプリケーションは分離されたコンテナ環境で実行されます。アンインストール時にはすべてのファイルとレジストリ項目が完全に削除され、OS 内にゴミを残しません。
- 動的なアーキテクチャとアセット配信: 1 つの
.appxuploadパッケージにx86とx64の両方のバイナリおよび各 DPI スケール(scale-100〜scale-400)が含まれます。ストアはユーザーの PC に必要なファイルのみをダウンロードさせるため、容量を大幅に節約できます。 - 自動クラッシュテレメトリ: Visual Studio はシンボルファイル(
.appxsym)を自動的に同梱します。クラッシュ発生時には Partner Center 上で関数名や行番号を含むスタックトレースを確認できます。
2. プロジェクト構成と事前準備
メインゲームの .csproj でマルチプラットフォーム構成とアセットコピーを有効化します:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net9.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
<Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup>
<Content Include="Content\**\*.*">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project>
NuGet パッケージの復元:
dotnet restore YourGame.Desktop.csproj -r win-x64
dotnet restore YourGame.Desktop.csproj -r win-x86
3. Visual Studio の Publish メニューの解説
WAP プロジェクトを右クリックして Publish を開くと、以下の 3 つの選択肢が表示されます:
- Associate App with the Store...(アプリをストアに関連付ける): パートナーセンターで予約したアプリ名を選択して公式 Publisher ID を取得し、
Package.StoreAssociation.xmlを自動生成します。 - Convert Content Group Map File(コンテンツグループ マップファイルの変換): 50GB を超える巨大ゲームのストリーミング分割インストール用です。インディーゲームでは不要です。
- Create App Packages...(アプリ パッケージの作成): ローカル実機テスト(Sideloading)やストア提出用アーカイブ(
_bundle.appxupload)を出力するメインウィザードです。
4. パッケージ作成ウィザードの設定
- 配布方法: ストア提出時は "Microsoft Store under a new or existing app name"、ローカルテスト時は "Sideloading" を選択します。
- アーキテクチャ: ☑️
x86と ☑️x64の両方にチェックを入れ、Release 構成を指定します。 - バンドル設定:
Generate app bundle: Always。 - バージョン管理規則:
Major.Minor.Build.Revision(例:1.0.0.0)。ストアにアップロードする新パッケージは、現在公開中のバージョン番号より必ず大きい必要があります。Automatically incrementを有効にするとリビジョンが自動加算されます。
5. Package.appxmanifest の要点
<rescap:Capability Name="runFullTrust" />: MonoGame は DirectX 11 やネイティブ API を使用するため、この設定でコンテナ内での完全なデスクトップ実行権限を付与します。InitialRotationPreference="landscape": ROG Ally などのポータブル Windows ゲーミング端末向けに横画面を固定します。
6. アセットスケーリングと BadgeLogo の注意点
Warning
BadgeLogo の絶対規則:
ロック画面用アイコン(BadgeLogo)は、純白(#FFFFFF)ピクセルと透明ピクセルのみで構成されている必要があります。カラーピクセルが含まれていると WACK のコントラスト検証で失格となります。
7. WACK 検証とトラブルシューティング
- "AppCert.exe wasn't found" エラー: Visual Studio Installer の「個別のコンポーネント」から「Windows アプリ認定キット」をインストールしてください。なおローカルでの WACK 実行は任意であり、ストアへ提出時にマイクロソフトのクラウド上で自動検証されます。
- MonoGame アセットの誤検知: 圧縮された
.xnbや.oggのバイト配列が実行ヘッダーと誤認されることがありますが、コンテンツフォルダ内の静的ファイルとして正常に承認されます。
8. サイドローディングによるローカル検証
AppPackages/YourGame_Test/ にて PowerShell を管理者権限で起動し、以下を実行します:
Set-ExecutionPolicy RemoteSigned -Scope Process
.\Add-AppDevPackage.ps1
実機でのゲームパッド動作や 60FPS の描画安定性を確認できます。
9. Microsoft Partner Center 提出チェックリスト
- Pricing and availability: 全 240 市場を選択し、米ドルで基準価格を設定(現地通貨へ自動換算)。
- Properties: カテゴリを
Gamesに指定し、プライバシーポリシー URL を入力。 - Age ratings: IARC 質問票に回答(アーケードゲームは通常 Everyone / PEGI 3 を即時取得)。
- Store listings: 1920x1080 の PC プレイ画面スクリーンショットを登録。
- Packages:
_bundle.appxuploadをアップロードして Submit to the Store をクリック。
Hiç yorum yok:
Yorum Gönder