更新:コンテンツのプロジェクトに、への参照を追加:コンテンツパイプラインをカスタマイズContentPipeline \ TiledPipelineExtensions.dll \ TiledLib_GS4 \ TiledLib GS4 \参照
を高度なゲーム開発トピックですが、それはでは難しいことではありませんすべて(もちろん、コンテンツを処理する内容と方法によって異なります)。
コンテンツパイプラインは、ゲームにコンテンツを含めるために実行される一連の手順です。たとえば、waveサウンドファイルはコンテンツパイプラインを通じて処理され、ゲームでSoundEffectオブジェクトとして使用できます。テクスチャとしてゲームに含まれる画像(Texture2DまたはTexture3D)にも同じことが適用されます。
コンテンツを読み込むときに、XNAフレームワーク内で既に定義されているコンテンツインポータとプロセッサを呼び出すContent.Loadを使用するXNAゲームでは、2Dテクスチャ、つまりMicrosoft.Xna.Framework.Content.Pipeline .Processors.TextureProcessorおよびMicrosoft.Xna.Framework.Content.Pipeline.TextureImporter。 FBX、Video、Audioコンテンツタイプにも同様のクラスがあります。
パイプラインアセンブリは、次のとおりです。特定のタイプのコンテンツをインポートできるアセンブリです。より詳細に説明する前に、すべてのコンテンツが特別なコンテンツプロジェクトにあり、このプロジェクトでは、ベースのコンテンツプロセッサーとインポータークラスから派生した多数のすぐに使えるインポーターを含むアセンブリを参照しています。これらのクラスを使用すると、Contentプロジェクトタイプを使用して特定のタイプに使用できるインポータのリストを作成し、プロパティウィンドウを使用して変更できます。以下のスクリーンショットを確認してください。
Iは、上記の例を挙げたように、事前に定義されたXNAコンテンツ輸入があります。 XNAでは、独自のインポート実装でコンテンツパイプラインを拡張することもできます。そのために、XNAには、コンテンツパイプライン拡張プロジェクトで拡張する2つのクラスが用意されています。最初はコンテンツインポーターで、もう1つはコンテンツプロセッサーです。
Content Importerは、Microsoft.Xna.Framework.Content.Pipeline.ContentImporterから派生し、文字列ファイル名とインポートコンテキストオブジェクトを渡したImportというメソッドをオーバーライドし、オブジェクトの種類(ジェネリック型T):あなたのゲームで使用する:Texture2D、文字列または独自の洗練されたタイプ。これは、コンテンツを読み込むときに最初に呼び出されます。
コンテンツプロセッサは、コンテンツをトランスフォームしたり、あるタイプのコンテンツを別のタイプのコンテンツに変換する方法を提供するクラスです。 XNAでは、Microsoft.Xna.Frameworkのサブクラスです。Content.Pipeline.ContentProcessorは、TInputオブジェクトとインポートコンテキストオブジェクトを取り、TOutputを返すProcessという名前のメソッドをオーバーライドします。コンテンツをインポートした後に秒と呼ばれます。単一のタイプのコンテンツを単一の方法でインポートする場合に便利ですが、さらに処理する方法については多くのオプションがあります。
これを実行するには、Content Pipeline Extensionプロジェクトを追加して、Content ProcessorおよびContent Importerクラスを追加します。これを行うには、新しいアイテムを追加します。これらの2つのタイプのクラスのアイテムテンプレートがありますので、簡単に基本実装のパイプラインはありません。それでも、このコンテンツパイプライン拡張プロジェクトを使用する前に、そのコンテンツプロジェクトを参照する必要があります。この参照を追加すると、カスタムコンテンツパイプラインが、アセットのプロパティウィンドウに表示されるコンテンツプロセッサ/インポータリストの選択肢として表示されます。インポーター/プロセッサーは、コンテンツインポータークラスを装飾するContentImporterAttributeで定義されている拡張子と一致する拡張子のアセットに対して自動的に選択されます。
//[using statements omitted for brevity]
// TODO: replace this with the type you want to import.
using TImport = System.String;
namespace ContentPipelineExtension1
{
/// <summary>
/// This class will be instantiated by the XNA Framework Content Pipeline
/// to import a file from disk into the specified type, TImport.
///
/// This should be part of a Content Pipeline Extension Library project.
///
/// TODO: change the ContentImporter attribute to specify the correct file
/// extension, display name, and default processor for this importer.
/// </summary>
[ContentImporter(".abc", DisplayName = "ABC Importer", DefaultProcessor = "AbcProcessor")]
public class ContentImporter1 : ContentImporter<TImport>
{
//Microsoft.Xna.Framework.Content.Pipeline.ContentImporter<T>
public override TImport Import(string filename, ContentImporterContext context)
{
return "This the simplest importer ever that doesn't even take into account the file being imported.";
}
}
}
// TODO: replace these with the processor input and output types.
using TInput = System.String;
using TOutput = System.String;
namespace ContentPipelineExtension1
{
/// <summary>
/// This class will be instantiated by the XNA Framework Content Pipeline
/// to apply custom processing to content data, converting an object of
/// type TInput to TOutput. The input and output types may be the same if
/// the processor wishes to alter data without changing its type.
///
/// This should be part of a Content Pipeline Extension Library project.
///
/// TODO: change the ContentProcessor attribute to specify the correct
/// display name for this processor.
/// </summary>
[ContentProcessor(DisplayName = "ContentPipelineExtension1.ContentProcessor1")]
public class ContentProcessor1 : Microsoft.Xna.Framework.Content.Pipeline.ContentProcessor<TInput, TOutput>
{
public override TOutput Process(TInput input, ContentProcessorContext context)
{
return input + "processed!!!!";
}
}
}
私はあなたのコンテンツの輸入延長があなたのコンテンツプロジェクトによって参照されなければならないことを改めて言及。以下のソリューションエクスプローラのスナップショットを確認してください。
また、コンテンツインポータは、今、あなたの資産を処理するために選択するオプションです。資産のインポーターとプロセッサーは、その拡張子に従って自動的に選択されます。
あなたは他の人があなたのゲームであなたと非プログラム的に協力したい場合、これは素晴らしいツールです。たとえば、レベルデザイナーがレベルを記述するXMLファイルやテキストファイルを作成したいとします。これらのファイルをインポートするコンテンツインポータを作成し、プログラムで最初に作成したかのように、ゲームで使用するゲームオブジェクトに配置します。
ここからどこから来ていますか?コンテンツプロジェクトには、コンテンツインポータとコンテンツプロセッサのプロパティが、参照されていないが一部のアセットの設定がコンテンツインポータとして指し示すアセンブリに存在するコンテンツに設定されているコンテンツがあります。コンテンツパイプライン拡張は、ダウンロードしたZIPにDLLとして存在します。パスの最初の文を参照してください。
うわー、かなりのポストになる!私のブログでそれを使わなければならない! :D
このアセンブリは、DemoContentコンテンツプロジェクトによって参照されます。このコンテンツプロジェクトはあなたのソリューションにありますか?そうであれば、その参照を参照して、それが大丈夫かどうかを確認してください。 –
@ScottW - 心が凝っていますか?私は、あなたが確認するために言うことをどこから検証するのか分からない。 – Moshe
ソリューションエクスプローラは、既定でVisual Studioの右側にあります。表示されていない場合は、[表示] - > [ソリューションエクスプローラ]をクリックします。これにより、すべてのプロジェクト(および展開時の各プロジェクトの下の情報)が表示されます。 "DemoContent"プロジェクトが存在することを確認します。そうであれば、DemoContentを展開し、 "References"フォルダを展開します。参照としてTiledPipelineExtensionsが表示されます。 –