XNA コンテンツ プロジェクト (
.contentproj
) を非 XNA プロジェクトからビルド時に参照できれば、後は XNB ファイルを自作クラスへデシリアライズする機能を実装する事で、XNA Content Pipeline の恩恵を得られる・・・はず。コンテンツ プロジェクトは XNA 依存であっても、生成される .xnb
はただのバイナリ ファイルであり、実行環境を問わないですからね。XNA コンテンツ プロジェクトは、XNA がインストールされていれば、Visual Studio で簡単に作成できます。しかし、Visual Studio 上では、非 XNA プロジェクトから参照する術がありません。そこで、どうせ MSBuild でビルドしているのだから
.proj
ファイルを弄れば良いのでは、と思い弄っていたら上手くいきました。もしかしたら、もっと簡単にやる方法があるのかもしれませんが、以下、要点を記録として記載しておきます。
1. 参照元プロジェクトで
XnaPlatform
と XnaProfile
を定義参照元
.proj
に、<XnaPlatform>
と <XnaProfile>
を追加します。例えば、以下のように追加します。<Project ...> <PropertyGroup> <Configuration ...> ... <XnaPlatform>Windows</XnaPlatform> <XnaProfile>HiDef</XnaProfile> </PropertyGroup> ... </Project>
2. コンテンツ プロジェクトへの参照を追加
参照元
.proj
に、参照したい .contentproj
を <ProjectReference>
で定義します。例えば、以下のように追加します。<Project ...> ... <ItemGroup> ... <ProjectReference Include="..\SampleXnbContent\SampleXnbContent.contentproj"> <Name>SampleXnbContent</Name> <XnaReferenceType>Content</XnaReferenceType> <Project>{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}</Project> </ProjectReference> ... </ItemGroup>
<Project>
には、参照先 .contentproj
で定義されている <ProjectGuid>
の値をコピーします。3. コンテンツ用ビルド定義をインポート
参照元
.proj
に、<Import>
で XNA コンテンツ用定義をインポートします。例えば、以下のように追加します。<Project ...> ... <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\v4.0\Microsoft.Xna.GameStudio.Content.targets" /> ... </Project>
$(MSBuildExtensionsPath)
は、自分の環境では "C:\Program Files (x86)\MSBuild"
です。ここまでで、参照元プロジェクトのビルドではコンテンツ プロジェクトが同時にビルドされ、参照元プロジェクトの出力先に
.xnb
ファイルが配置されるかと思います。4. コンテンツ ルート ディレクトリを定義
ここまででは、参照元プロジェクトの出力先にはコンテンツ プロジェクトの名前がそのままディレクトリとして作られ、その中に .xnb ファイルが出力されます。XNA のデフォルトのように、
Content
ディレクトリへ .xnb
を出力したい場合には、参照先 .contentproj
にこれを定義します。<Project ...> <PropertyGroup> <ProjectGuid>...</ProjectGuid> ... <ContentRootDirectory>Content</ContentRootDirectory> </PropertyGroup> </Project>
・・・と、ひとまず出力先に
.xnb
を含める事が出来たので、後は XNB の内容を解析し、自分のクラスへデシリアライズするだけだなと。
0 件のコメント:
コメントを投稿