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 件のコメント:
コメントを投稿