FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告  page to top

[XNA4.0] XNA Content Pipeline Debugging

震災でしばらく更新が滞っておりましたが久しぶりの更新です。というわけで今回はXNA4.0の開発に関する話題。今日はXNA Content Pipeline Debuggingについて。

最近 Content Pipeline の開発をしてたりするのですが、実はゲーム本体の開発と少々異なり不便な点があります。それが今回のトピックでもあるコンテンツパイプラインのデバッグです。

何が不便かと言うと、ゲーム本体の開発であれば普通にVisualStudioのデバッガでブレークポイントを設定して、数値がどうなっているかとかを見ることが可能な一方、このコンテンツパイプラインでは普通にブレークポイントを仕掛けて動作させても引っかからないのです。
理屈云々は他のサイト様で色々説明されてたりするので、詳細は省きますが、とにもかくにも不便で仕方がありません。

と、この不便を解消するべく色々調べていたところいくつか解決策があることがわかりました。おおむねこんな感じです。


  1. JITデバッガでアタッチする方法
  2. CLRデバッガでアタッチする方法
  3. VisualStudioでいつもどおりデバッグする方法


一般的には1か2の方法が主流の様子。具体的にはソースコード中に


  • System.Diagnostics.Debugger.Launch();
  • System.Diagnostics.Debugger.Break();


といった記述を行い、外部デバッガにアタッチさせる方法。こちらはひにけに様でも紹介されていたりするので、具体的な方法についてはこちらのリンクを参照していただければと。

ただ、僕としてはこのソースコード中にデバッガ用の記載が入ることがなんとなく納得いかない。そのうえ一部環境ではうまくアタッチできなかったりもするようだ。

そこで見つけたのが3の方法。なんと特段外部デバッガに頼ることもなく、普段どおりにブレークポイントを仕掛けてデバッグできる。また環境にも特に依存してしまうこともなさそう。
個人的にとても気に入っているので簡単に方法と併せて書いてみたいと思ったり思わなかったり。いえ、思います。


■まずは Content Pipeline Exntension プロジェクトを作る

Content Pipeline Extension を開発したいので、当然必要。というわけでおもむろにMicrosoft Visual C# 2010 Expressを立ち上げます。それ以外の環境の人は適宜合わせていただければ。
立ち上げたら新しいプロジェクトを作成してください。

contentpipeline_debug01.png


コンテンツパイプライン拡張ライブラリ(4.0)を選択
名前場所ソリューション名を決める
(今回はサンプルなので場所はC直下、名前はContentPipelineExtensionにします)
OKを押す


■パイプライン処理を作る

とりあえず何かパイプライン処理を行うソースを書きます。今回は中身は別に気にしないので、標準のモデルプロセッサを呼び出すカスタムプロセッサを作ってみます。

contentpipeline_debug02.png


作りたいものがある場合は適宜作成していただければと思います。以下はモデルプロセッサを作っていると想定して進めます。
また今回作っているプロセッサにはモデルテスト プロセッサと名づけました。これも後ほど登場します。


■コンテンツプロジェクトを追加する

ソリューションにコンテンツプロジェクトを追加しましょう。

contentpipeline_debug03.png


①画面右のソリューションエクスプローラーからソリューションを右クリック
②ポップアップしたコンテキストメニュから追加新しいプロジェクトを選択

すると、新しいプロジェクトの追加ウィンドウが表示されるので…

contentpipeline_debug04.png


空のコンテンツプロジェクト(4.0)を選択
名前場所を決める(今回は、場所はそのまま、名前はContentにします)
OKを押す


■コンテンツを登録・設定する

さて、今回はモデルプロセッサなので、fbxファイルを処理する流れとなります。
サンプル用に適当なfbxファイルを用意し、登録を行います。今回はtext.fbxを用意したものとします。

contentpipeline_debug05.png


①画面右のソリューションエクスプローラーからContentを右クリック
②ポップアップしたコンテキストメニュから追加既存の項目を選択

コモンダイアログがポップアップするので、fbxファイルを選択して登録終了です。

次に、先ほど作成しておいたプロセッサで処理することを設定します。まずはプロセッサを使用できるように参照設定を行います。

contentpipeline_debug06.png


①ソリューションエクスプローラーから参照設定(Contentプロジェクトの方)を右クリック
参照の追加を選択

参照の追加ウィンドウがポップアップします。

contentpipeline_debug07.png


プロジェクトタブを選択
ContentPipelineExtension(先ほど作成したプロジェクト)を選択
OKを押す

これでContentPipelineExtensionプロジェクトとContentプロジェクトが関連付けられました。

今度は、先ほど登録したtest.fbxとカスタムプロセッサ(モデルテストプロセッサ)をつなぎます。

contentpipeline_debug08.png


①ソリューションエクスプローラーからtext.fbxを選択(あるいは[右クリック]-[プロパティ])
②プロパティのコンテンツプロセッサを先ほど作ったモデルテストプロセッサに設定


■デバッグプロジェクトを追加する

さてここからが本題。デバッグ用プロジェクトをソリューションに追加します。

contentpipeline_debug03.png


①ソリューションエクスプローラーからソリューションを右クリック
②ポップアップしたコンテキストメニュから追加新しいプロジェクトを選択


次にプロジェクトをオンラインテンプレートから探します。
ポップアップした新しいプロジェクトの追加ウィンドウで以下のように操作します。

contentpipeline_debug09.png


①左側のオンラインテンプレートを選択
②右上の検索窓にdebuggingと入力
③中央にXNA Content Pipeline Debuggingと現れたら、選択
名前場所を入力
(場所はいじる必要ありません。名前はサンプルとしてDebugPipelineにしました)
OKを押す

これでデバッグプロジェクトDebugPipelineが追加されました。


■デバッグプロジェクトを設定する

上記のデバッグプロジェクトの追加が完了した時点で、おそらくProgram.csが開かれていると思います。
ここで設定項目を設定します。以下は見やすくするためコメントを削除してありますので注意して下さい。

contentpipeline_debug10.png


①デバッグしたいリソースのあるコンテンツプロジェクトファイルのパスを設定
(今回はC:\ContentPipelineExtension\Content\Content.csproj)
②実際に処理をさせてみるリソースファイル名を設定
(今回はtest.fbx)
HiDefReachかを選択
(ゲーム本体の設定に合わせます)
プラットフォームを設定
(同じくゲーム本体の設定に合わせます)

なおはエスケープ不要です。


■デバッグプロジェクトをスタートアッププロジェクトに設定する

今度はデバッグプロジェクトをスタートアッププロジェクトに設定します。

contentpipeline_debug11.png


①画面右のソリューションエクスプローラーからDebugPipelineを右クリック
②ポップアップしたコンテキストメニュからスタートアッププロジェクトに設定を選択

DebugPipeline太字になればOKです。


■デバッグしてみる

以上で準備は全て完了です。
あとは、実際にカスタムプロセッサにブレークポイントを設定してF5を押して実行してみましょう。

コンソールがぽんと出た後…

contentpipeline_debug12.png


こんな感じで引っかかれば完璧です。

あとは煮るなり焼くなり? 好きに? して?


■要約

まぁ長い。

と思われた方。実はそうでもないです。下の補足の通りではありますが、序盤から中盤あたりまでは実は今回のデバッグの作業自体にはほぼ無関係なんです。というわけで、実際にまとめてしまうと…


  1. XNA Content Pipeline Debuggingをオンラインテンプレートから落としてくる
  2. XNA Content Pipeline Debuggingプロジェクトを作成する
  3. Contentプロジェクトファイルパスとリソースファイル名をProgram.csに記載して実行


これだけなんですよね。ほら簡単。


■補足

今回はわざわざContentプロジェクトやExtensionプロジェクトを新規で作成しましたが、大体においてこれらのプロジェクトは既存のものがあるかと思います。その場合はもちろん新規作成ではなく既存のプロジェクトを組み込んでしまって問題ありません。

というか、もっと言えばわざわざ同じソリューションに組み込まなくても使えます。はい。でも、組み込まないとソースファイル開くの手間だったりするので、あくまで個人的には組み込みたい派。ということでござんす。あい。
関連記事

Tag:XNA4.0  Trackback:0 comment:0 page to top

Comment

comment form
(編集・削除用):
プロフィール

Nikukyu

Author:Nikukyu
なんちゃってゲーム開発者をしています。

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。