ゲームのインストールとメンテナンス
この記事では、ゲームのインストールに必要な時間に対するユーザーのフラストレーションを軽減し、不要なサポートへの問い合わせを防ぎ、ユーザーができるだけ速く簡単にゲームを開始できるようにするための一連のベスト プラクティスについて説明します。
初回インストール
ユーザーがゲームを購入するのは、インストールを楽しむためではなく、プレイを楽しむためです。 ゲームのインストールは、エンド ユーザー向けにできる限り迅速かつ簡単で、ストレスのないものにしましょう。 理想を言えば、エンド ユーザーがインストール UI を目にすることすらなく、ゲーム ディスクをトレイに入れるだけでプレイを開始できるようにしましょう。
インストール UI の効率化
既存のゲームのインストール UI では、次のような一般的な側面が、望ましいエンドユーザー エクスペリエンスの妨げになっています。
ユーザーに不要な質問をする。
たとえば、多くのゲームでは、ユーザーに DirectX をインストールするかどうかを尋ねます。 ゲームの実行に Microsoft DirectX が必要で、適切なバージョンの DirectX がまだインストールされていないのであれば、ゲームは DirectX をインストールすればよいのです。
大多数のユーザーが同じように答えるであろう質問をユーザーにする。
一般的なユーザー向けには、インストール パスやスタート メニューの場所などは既定の設定で問題ありません。 これらの設定を変更するユーザー向けに、詳細オプションを提供します。
インストール UI は、一般的なユーザーができる限り早くゲームのプレイを開始できるように設計しましょう。 ユーザーのコンピューターで AutoRun が有効になっている場合 (既定設定)、セットアップ プログラムでは、ユーザーができる限り早くゲームのプレイを開始したいと考えていると想定して、不要な質問をすべてスキップするようにしましょう。 セットアップ プログラムは、 オンデマンド インストール で説明されているようなセットアップを使用して、デフォルトのインストール パスにゲームのインストールを開始します。 インストールを自動的に開始する前に、ユーザーにインストール設定を変更する機会を与えるのが適切です。 ただしそのためには、詳細セットアップ オプションのキーを押すようにユーザーに求め、ユーザーが 5 〜 10 秒以内にそのキーを押さない場合は、既定のオプションで自動的に続行するようにしましょう。
ユーザーのコンピューターで AutoRun が有効になっていない場合、セットアップ プログラムでは、ユーザーがゲームのインストールを自動的に開始したいと考えていないと想定しましょう。 セットアップ プログラムが AutoRun 以外の手段で開始された場合は、詳細セットアップ UI が起動されるようにしましょう。
インストールに必要な時間の短縮
現在、ほとんどの Microsoft Windows ゲームは、インストール プロセスの完了に 5 分から 30 分かかります。 これに対し、ほとんどのコンソール ゲームは、ユーザーがゲーム CD を挿入してからプレイ可能になるまでに、30 秒以上かかりません。 この違いは、ほとんどの Windows ゲームがコンテンツの大部分 (またはすべて) をコンピューターのハード ドライブから実行するように設計されているのに対し、大量のコンテンツを永続的に保存する場所がないコンソール ゲームでは、コンテンツをソース メディアから実行する必要があるという事実によるものです。 ローカル ハード ドライブからコンテンツを読み込むと、ゲーム内の読み込み時間は短縮されますが、その代償として、すべてのコンテンツをソース メディアからハード ドライブにコピーする必要があります。 ほとんどの Windows ゲームでは、インストール プロセスの一部として、すべてのコンテンツを一度にハード ドライブにコピーするようになっています。 これにより、ユーザーはゲームをプレイする前に数分間、進行状況バーを見つめることになり、ゲームの初期エクスペリエンスが損なわれます。
ゲームの初回インストールにかかる時間を最小限に抑えるために使用できるアプローチには、 最小インストール と オンデマンド インストールの 2 つがあります。
最小インストール
最小インストール シナリオでは、ゲームは最小限のコンテンツ セットのみをハード ドライブにインストールします。 通常、このコンテンツはゲームの実行可能ファイルと DLL のみで構成されます。 残りのコンテンツは、ソース メディアから直接アクセスされます。 ゲームの実行可能ファイルが 10 〜 20 MB を超えることはほとんどないため、インストールに必要な時間が大幅に短縮されます。 欠点は、ゲーム中にコンテンツを読み込むのに時間がかかることです。これは、低速なソース メディアから読み込む必要があるためです。
Windows インストーラーベースのセットアップで最小インストール構成を作成するには:
ハード ドライブにインストールするすべてのコンポーネントを、ローカルにインストールするようにマークされた機能にグループ化する。
この機能は「ブートストラップ」機能と呼ばれます。
ソース メディアから実行されるすべてのコンポーネントを、「ソースから実行」とマークされた機能にグループ化する。
ソース メディアにある可能性のあるファイルを開く場合、パスをハードコーディングする代わりに、 MsiGetComponentPath 関数を使用してファイルへのパスを決定する。
これにより、ユーザーの CD/DVD ドライブのドライブ文字が変更された場合でも、ファイルが見つかるようになります。
CD/DVD に残るコンテンツを圧縮する。
CD/DVD ドライブからのデータ転送速度が遅いため、コンテンツを解凍するのに費やされる CPU 時間は通常、目立たなくなります。
コンテンツを連続する大きなファイルにグループ化し、順次アクセスされるようにする。
CD/DVD ドライブのシーク時間はハード ドライブと比較して非常に遅く、ほとんどの CD/DVD ドライブは、連続する大きなファイルを読み取っていない限り、ピーク転送速度に達しません。
CD/DVD 上のコンテンツをアクセスされやすい順序にレイアウトする。
ファイルがディスク上のレイアウトと同じ順序でアクセスされると、シーク時間が大幅に短縮されます。
オンデマンド インストール
オンデマンド インストール シナリオでは、最小インストールと同様に、ゲームは最初、ゲームを開始するために必要なファイルのみをハード ドライブにインストールします。 ただし、残りのコンテンツを必要なときに毎回ソース メディアからアクセスするのではなく、必要になった初回にそのコンテンツをハード ドライブにインストールし、その後はローカル ハード ドライブからアクセスします。 初回インストールにかかる時間は最小インストールと同じくらい短いですが、一度コンテンツがアクセスされると、その後の読み込み時間が改善されます。
Windows インストーラーベースのセットアップでオンデマンド インストール構成を作成するには:
ハード ドライブに最初にインストールするすべてのコンポーネントを、ローカルにインストールするようにマークされた機能にグループ化する。
これは、最小インストールのブートストラップ機能と同じであることに注意してください。
残りのコンテンツを、一緒に使用される可能性の高いコンポーネントに基づいて、複数の機能にグループ化する。
たとえば、レベルベースのゲームでは、特定のレベルで使用されるすべてのコンテンツを 1 つの機能にグループ化します。 Windows インストーラーでは、コンポーネントを複数の機能で共有できることに注意してください。そのため、複数のレベルで使用されるコンテンツがある場合、そのコンテンツを複製することなく、必要なすべてのレベルの機能に追加できます。 これらの機能はすべて「Advertised」とマークするようにしましょう。これは、最初はインストールされないが必要に応じて後でインストールできることを意味します。
ファイルが必要になったときは、まず MsiQueryFeatureState 関数を使用して、ファイルが既にインストールされているかどうかを確認する。
まだインストールされていない場合 (つまり、その状態が INSTALLSTATE_ADVERTISED の場合)、 MsiConfigureFeature 関数を呼び出して、その機能をローカルにインストールします。 ファイルをインストール後に開くときは、 MsiGetComponentPath を呼び出して、そのファイルへのパスを決定します。 このシナリオでは厳密には必要ありませんが (コンテンツは使用される前に常にハード ドライブにインストールされるため)、これによりオンデマンド インストールに加えて最小インストールをサポートしやすくなります。
可能であれば、すぐに必要になる可能性のあるコンテンツを予測し、アイドル時間中にバックグラウンドでインストールする。
バックグラウンドでのインストールは、ゲームがコンピューターの性能を最大限には必要としない時点、たとえばイントロムービー、カットシーン、メニューなどを表示している間に行うのが最適です。
ゲームのオプション メニューに、残りのすべてのコンテンツを強制的にインストールするオプションを作成する。
これを実装するには、すべてのオンデマンド インストール機能の親となる機能を作成し、 MsiConfigureFeature を呼び出して、そのマスター機能をローカルにインストールします。 これにより、下位の機能もローカルにインストールされます。
コンテンツのレイアウトは最小インストールの場合と同様ですが、同時に必要となる可能性の高いコンテンツ同士を一緒にするようにしましょう (たとえば、1 つのレベルのすべてのコンテンツを一緒にするなど)。
インストール後のゲーム プレイ
AutoRun
既にインストールされているゲームをプレイするには、ユーザーはインストール ディスクをドライブ トレイに入れるだけで済むようになります。 ディスク上の AutoRun 実行可能ファイルが最初に行う必要があるのは、ゲームが既にインストールされているかどうかを確認し、インストールされている場合はゲームを起動することです。 ゲームが Windows インストーラーベースのセットアップを使用してインストールされたとすると、ゲームがインストールされているかどうかを確認するには、 MsiQueryProductState 関数を 1 回呼び出すだけで済みます。
オンデマンド インストールからフル インストールへの変更
オンデマンド インストールでは、ユーザーはフル インストールよりもはるかに早くゲームのプレイを開始できますが、ゲーム コンテンツの残りをローカル ハード ドライブに明示的にインストールしたいと考える場合があります。 ユーザーはソース メディアを必要とせずにゲームをプレイできるようにしたいと考える場合や、コンテンツのオンデマンド インストールによりゲーム内の読み込み時間が長くなるのを単に避けたいと考える場合があります。 ゲームのセットアップで Windows インストーラーを使用している場合は、ゲーム内のオプション UI に残りのコンテンツのインストールを完了するオプションを提供できます。 ユーザーがこのオプションを選択すると、ゲームは MsiConfigureFeature を呼び出して残りの機能を強制的にローカルにインストールできます。そのために別のセットアップ アプリケーションを起動する必要はありません。
ゲームのソフトウェアとコンテンツのメンテナンス
Windows ゲームがコンソール ゲームよりも優れている点の 1 つは、初回リリース後に発行元がゲームの更新プログラムを比較的簡単にリリースできることです。 これらの更新プログラムが新しいコンテンツを導入するものであれ、単にバグを修正するものであれ、エンド ユーザーにとって更新プロセスができる限り簡単になることが重要です。 オンライン ゲームの場合、更新プロセスはさらに重要です。通常、ゲームに接続するために、すべてのユーザーはゲームの最新バージョンを実行している必要があります。
更新プログラムの自動的な確認
ユーザーがパッチの検索を覚えておく必要はありません。 ゲームで利用できる更新プログラムがある場合は、少なくともユーザーに通知する必要があり、パッチが既にダウンロードされているのが理想です。
ゲームが更新プログラムをチェックする簡単な方法は、発行元によってホストされる Web サーバーに特定の URL を使用して接続し、ゲームの最新バージョンのバージョン番号を指定するテキスト ファイルと、ゲームを最新バージョンに更新するパッケージをダウンロードするための URL をダウンロードすることです。
ユーザーがゲームをプレイするたびに更新プログラムをチェックすることで、ユーザーが最新バージョンを実行していることを確認できます。 ただし、ユーザーがゲームをプレイしようとする直前に新しい更新プログラムがあることがわかった場合、ユーザーは更新プログラムのダウンロードが完了するまでゲームのプレイの開始を遅らせざるを得なくなる可能性があります。 更新プログラムが大きかったりネットワーク接続が遅かったりする場合、この遅延は数時間に及ぶこともあります。 ゲームをプレイする前にユーザーを待たせることのないように、ゲームはタスク スケジューラを使用して、新しい更新プログラムの定期的なチェックをスケジュールできます。 更新プログラムが検出された場合、ゲームはすぐに更新プログラムのダウンロードを開始できるため、次にユーザーがゲームをプレイするまでにダウンロードが完了し、インストールの準備ができている可能性が高くなります。
パッチの自動ダウンロード
ゲームで、利用できる新しい更新プログラムがあることを検出したら、すぐに更新プログラムのダウンロードを開始するようにしましょう。 更新プログラムをチェックするタスクは通常バックグラウンドで目立たずに実行されているため、ダウンロードもできる限りユーザーの妨げにならないように行う必要があります。 バックグラウンド インテリジェント転送サービス (BITS) は、アプリケーション自体が実行されていない間でも、アプリケーションがインターネットからファイルをダウンロードできるようにする、オペレーティング システムの機能です。 BITS のダウンロード ジョブは、ユーザーがログオンしているときにのみ、かつマシンが既にネットワークに接続されているときにのみ実行されます。 BITS により、マシンが強制的にネットワークに接続されることはありません。 ユーザーがネットワークから切断するかログオフすると、BITS ジョブは一時停止され、次にユーザーがログインしてネットワークに接続すると、ダウンロードが再開されます。 アプリケーションでは、ネットワークを使用している他のアプリケーション (オンライン ゲームなど) のパフォーマンスに影響を与えないように、未使用のままになっているネットワーク帯域幅のみを使用するように、BITS ジョブを構成できます。 BITS は Windows XP および Windows 2000 Service Pack 3 で利用できます。
その他のリソース
この記事で言及されている技術の詳細については、次のトピックを参照してください。
ゲームで Windows インストーラーを使用する方法の詳細については、来月の Driving DirectX コラム「ゲーム開発者向け Windows インストーラー入門」を参照してください。