MonoGame でのコンテンツの登録と読み込み

概要

MonoGame 3.3 までは XNA Game Studio との互換性を考慮し、XNA Game Studio でビルドしたコンテンツ(.xnb)を読み込めるようになっていましたが、MonoGame 3.4 では廃止されました。(もしかしたら完全に廃止されたわけではありませんが、コンテンツパイプラインの拡張機能は廃止されているので、どちらにせよ移行は考えておいた方がいいです)

ここでは MonoGame 用のコンテンツビルダー「MGCB (MonoGame Content Builder)」を使って、テクスチャーに使用する画像の登録、ビルド、読み込みを行います。

動作環境

Windows
  • Windows Vista
  • Windows 7
  • Windows 8
  • Windows 8.1
  • Windows 10
Visual Studio
  • Visual Studio 2010
  • Visual Studio 2012
  • Visual Studio 2013
  • Visual Studio 2015
MonoGame
  • MonoGame 3.4
  • MonoGame 3.5

動作確認環境

Windows
  • Windows 8.1
  • Windows 10
Visual Studio
  • Visual Studio 2013
  • Visual Studio 2015
MonoGame
  • MonoGame 3.4
  • MonoGame 3.5

内容

今回はスプライトとして描画するためのテクスチャーを作成するために、画像ファイルを用意して読み込む方法について説明します。

最初に読み込む画像を用意しておきます。場所はどこでも構いません。

読み込む画像を用意

MonoGame のプロジェクトを作成したら「Content」フォルダの中にある「Content.mgcb」ファイルをダブルクリックして開きます。

「Content.mgcb」ファイルを開く

Visual Studio にテキストが表示されるだけで「MonoGame Pipeline」が起動しない場合はスタートメニューから起動してください。起動後はメニューの「File」-「Open」から「Content.mgcb」ファイルを開きます。

「MonoGame Pipeline」を起動

「Content.mgcb」ファイルを開くと「MonoGame Pipeline」が起動します。MonoGame Pipeline は XNA Game Studio の Content フォルダ内の構成に類似したものになるので、XNA Game Studio を使ったことがある人はなじみやすいかと思います。

「MonoGame Pipeline」が起動

使う画像を登録します。残念ながらドラッグ&ドロップでは追加できないのでメニューから追加します。

メニューから「Edit」→「Add」→「Existing Item」を選択するとファイル選択ダイアログが表示されるので、使用する画像ファイルを選択します。

画像ファイルの選択

ファイルを選択すると、ファイルをコピーして追加するかリンクとして追加するか選択できます。

どちらを選択してもかまいませんが、ここではコピーして追加しています。

コピーとして追加するかリンクとして追加するか

選択した画像が Content の下に追加されました。画像ファイルを選択すると、XNA Game Studio と同じように Importer と Processor が選択できるようになっています。パラメータも変更できますが、なぜか色情報は変更できないようです。

追加された画像

とりあえずそのままビルドしてみます。XNA の時にあった .xnb ファイルを作成するときのビルドと同じと思ってもらって構いません。

メニューから「Build」→「Build」を選択します。

ビルドを行う

mgcb ファイルは一種のプロジェクトファイルなので、保存するかどうか確認されます。「はい」を選択して保存します。

プロジェクト保存確認

ビルドが開始されると右側にメッセージが表示されます。正常終了か異常終了、ビルド時間などが表示されます。エラーになった場合は詳細メッセージが表示されるので、それに従って修正します。

ビルド結果

ビルドが完了したらコンテンツの準備は完了です。

画像を読み込んでスプライトとして描画するコードは XNA の時とまったく同じです。一応コードの追加部分だけ記載します。

フィールドに読み込んだ画像を格納するテクスチャーを定義します。

GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;

/// <summary>
/// テクスチャー
/// </summary>
private Texture2D texture = null;

LoadContent メソッド内でテクスチャーを読み込み、作成します。アセット名は既定ではファイル名(拡張子なし)になります。

protected override void LoadContent()
{
  // Create a new SpriteBatch, which can be used to draw textures.
  spriteBatch = new SpriteBatch(GraphicsDevice);

  // TODO: use this.Content to load your game content here

  // テクスチャーをコンテンツパイプラインから読み込む
  this.texture = this.Content.Load<Texture2D>("XNATips");
}

Draw メソッドでのスプライトの描画部分です。XNA の時とまったく同じコードになります。

protected override void Draw(GameTime gameTime)
{
  GraphicsDevice.Clear(Color.CornflowerBlue);

  // TODO: Add your drawing code here

  // スプライトの描画準備
  this.spriteBatch.Begin();

  // スプライトを描画する
  this.spriteBatch.Draw(this.texture, new Vector2(100.0f, 100.0f), Color.White);

  // スプライトの一括描画
  this.spriteBatch.End();

  base.Draw(gameTime);
}

実行すると読み込んだ画像でスプライトが表示されることを確認できます。

スプライトの表示