XNA Game Studio Express正式版リリース記念 特別企画
.NET&Windows Vistaへ広がるDirectXの世界

Xbox 360で.NETとC#による自作ゲームを動かそう

NyaRuRu
Microsoft MVP Windows - DirectX(Jan 2004 - Dec 2007)
2007/01/10
Page1 Page2 Page3 Page4

3. 実行とデバッグ

Xbox 360側の実行準備

 Windows上のXNA GSEで開発したゲームを、Xbox 360で実行するには、作成されたゲーム・ファイルをXbox 360に転送する必要がある。ASP.NET開発などと同じく、この作業は「配置」または「Deploy」と呼ばれる。

 XNA Game Launcherの画面から、[Connect to Computer]を選択すると、次のような待ち受け画面が表示される。Xbox 360は、この状態のまま待機させておく。

[Connect to Computer]選択後の様子
Windows側からのデータ転送開始を待っているところである。

Windows(XNA GSE)側の実行準備

 ゲームをXbox 360に配置するためには、同一セグメントに属するLAN上にWindowsとXbox 360が存在する必要がある。ここまでの設定で問題がなければ、XNA GSEのメニュー・バーから[ビルド]−[ソリューションの配置]を選択することで*8、転送が開始されるはずだ*9。いきなり[F5]キーを押してゲームを開始しても、配置は自動的に行われる。

XNA GSEのメニュー・バーに表示される配置に関するメニュー項目
ここで[ソリューションの配置]を選択すればよい。あるいは[<プロジェクト名> の配置](この例では[MySpacewarXbox1 の配置])を選択してもよい。

 現在、Xbox 360にXNAゲームを配置する方法は、XNA GSEのIDE上から配置を実行するしかない。つまり、XNAで作成されたゲームを遊びたいだけというユーザーも、自分のXbox 360にゲームを配置するにはXNA GSEをインストールしなければならないことになる。また、USBメモリやCD-Rといったメディア経由での配布も現時点ではサポートされていないが、これはMicrosoftが定めている社内ポリシーとも関連があるようだ。いずれにせよ、XNAで作成したゲームを多くの人に遊んでもらうためには、最低限ネットワーク経由の簡易配置ツールの登場には期待したいものである*10

*8 上掲のメニュー項目の画面のように、XNAプロジェクト読み込み時は、IDEの表示項目が微妙に変化している。詳細についてはヘルプの「IDE Differences Between Xbox 360 and Windows Development」を参照のこと。
*9 実際の転送は、XnaTrans.exeというサービスを介して行われる。ファイアウォールなどの設定が必要な場合は、使用するポートがヘルプのThird-Party Firewall Settingsに書かれている。
*10 Visual Studio 2005の上位エディションであれば、コマンドラインから「devenv.exe <solutionname> /deploy」と実行することで配置の自動化が可能なのだが、残念ながらVisual C# 2005 Express Editionはこのコマンドに対応していない。

XNAゲームの実行

 配置が完了したXNAゲームを実行する方法は2通りある。1つは[Connect to Computer]の画面でXNA GSEからゲームを実行する方法で、もう1つはXNA Game Launcherの[My XNA Games]から起動するというものだ。前者は主にデバッグに使用し、後者は作成したゲームをみんなで遊ぶ場合に使用する。

 まずはXNA GSEからの実行とデバッグについて見ていこう。

XNA GSEからXNAゲームを実行する

 Xbox 360を[Connect to Computer]の状態にしておくと、XNA GSE からゲームを起動したり強制終了させたりできる。XNAのXbox 360プロジェクトを読み込み、XNA GSEのメニュー・バーから[デバッグ開始](F5)または[デバッグなしで開始](Ctrl+F5)を選択してみよう。ビルド、配置、そしてゲームの起動が順番に行われるはずだ。

 デバッグを開始したゲームはいつでも[デバッグの停止](Shift+F5)で強制終了することができる。ゲーム開発中は、何度もこの機能にお世話になることだろう。強制終了すると再び[Connect to Computer]の画面に戻る。

Xbox 360上で実行中の「Spacewar」タイトル画面
画面右半分に「Spacewar」タイトル画面が見えているが、これだけだとWindows版と見分けがつかないので、Xbox 360のダッシュボード(画面左半分)を表示させてみた。商用のXbox 360ゲームと同様、ゲーム実行中であってもこのダッシュボード上の機能は使用可能である。

 さて、XNA GSEの大きな特徴の1つが、リモート・デバッグをサポートしていることだ。例えば次のようなことが、Xbox 360でのゲームの実行中に可能になっている。

  • 実行中のブレイク・ポイント作成
  • ステップ実行、カーソル位置までの実行や、次に実行されるステートメントの移動
  • ブレイク中の変数ウオッチ、実行中の変数内容の書き換え
  • System.Diagnostics.Debug.WriteLineメソッドによるデバッグ出力

 一方で、以下のようなデバッグ機能は使用できない*11

  • デバッグ時のスレッド・ウィンドウ表示(Visual C# 2005 Express Editionの制限)
  • アンマネージ・コードのデバッグ(Visual C# 2005 Express Editionの制限)
  • エディット・コンティニュー(.NET Compact Frameworkの制限)
  • [デバッグなしで開始]したゲームに後からデバッガをアタッチすること
  • デバッガ・ビジュアライザや、未処理例外のトラップ
*11 詳細についてはヘルプの「Debugging an Xbox 360 Game」を参照されたい。

 しかし、これらの高度なデバッグ機能が使用できないことを除けば、Xbox 360のリモート・デバッグは非常に快適であり、ローカル・プロセスをデバッグしているのと操作感はほとんど変わらないという印象を受けた。同じディスプレイに表示すれば、Windows上で実行されているのかXbox 360上で実行されているのか、デバッグ作業の様子からは、すぐには見分けがつかないのではないかと思う。

Visual C# 2005 Express Editionを使ったXbox 360のリモート・デバッグ
ブレイク・ポイントで停止させ、変数の中身を表示したところ。従来どおりのデバッグを、動作中のXbox 360に対しても変わらず行うことができるのは心強い。

XNA Game LauncherからXNAゲームを実行する

 先ほど述べたように、一度配置したゲームは、XNA Game Launcherの[My XNA Games]から自由に選んで実行したり、削除したりすることができる。一度ゲームを起動してしまえば、あとは通常のXbox 360のゲームと変わらない感覚でプレイできるだろう。

[My XNA Games]を表示させたところ。
タイトルや説明の文章にはアセンブリ属性が使用される。具体的には、AssemblyTitle属性に指定したものがタイトルに、AssemblyDescription属性に指定したものが説明にそれぞれ表示されている。詳細については、ヘルプの「IDE Differences Between Xbox 360 and Windows Development」内の「Assembly Information Dialog Box」に詳しい。
現時点でXNAは開発者向けという印象が強く、多くのユーザーがXNA GSE越しにアクセスしていると考えられるが、プレイ目的のユーザーにとっても魅力が増してくれば、この画面もにぎやかになってくるだろうか。

配置したゲームの容量を確認する

 Xbox 360のメニューから[システム]−[メモリー]−[Hard Drive]−[ゲーム]−[XNA Game Launcher]を選択すると、配置されたXNAゲームとその容量を確認することができる。ただし、これらを別のストレージに移動させることはできない。同様にUSBメモリなどからゲームを配置することもできない。

Xbox 360のストレージ・データ管理ツールから表示したXNAゲーム
スターター・キットの「Spacewar」はゲーム内容の割に意外と大きく、73Mbytesもある。

 最後に、以上の話を振り返ってまとめておこう。


 INDEX
  [XNA Game Studio Express正式版リリース記念 特別企画]
  .NET&Windows Vistaへ広がるDirectXの世界
  Xbox 360で.NETとC#による自作ゲームを動かそう
    1.ハードウェアとソフトウェアの入手まで
    2.環境を設定する
  3.実行とデバッグ
    4.まとめ(一連の流れを図解)
 
インデックス・ページヘ  「.NET&Windows Vistaへ広がるDirectXの世界」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間