3

プロジェクトのContentサブフォルダーにコンテンツ(オーディオファイル、構成ファイル、テクスチャなど)を保存するゲームエンジンに取り組んでいます。マスターファイルは$(ProjectDir)/ Contentにあり、マスターファイルが変更されるたびに個々のターゲットディレクトリ(「Debug/Content」および「Release/Content」)にコピーする必要があります。

私はかなりうまく機能するビルド後のイベントを使用しています:

XCOPY "$(ProjectDir)Content" "$(TargetDir)Content" / I / D / E / C / Y

残念ながら、ビルドとリンクが発生した場合にのみ機能します。つまり、.cppファイルを「タッチ」してトリガーする必要があります。そうしないと、VSはビルド後のXCOPYコマンドを実行しません。

Build(F6)またはRun(F5)で常にコマンドを実行するようにする方法はありますか?または、プロジェクト内のコンテンツファイルを処理するためのより良い方法はありますか?コンテンツファイルをすばやく調整してから、ゲームを実行してプレビューできるようにしたいと考えています。

これは、Visual Studio2012Professionalにあります。

4

2 に答える 2

3

編集:私の答えの以前のバージョンは技術的には正しいものでしたが、これほど簡単に設定することはできませんでした。

.vcxprojファイルを開き、下部に次の行を含めます。

<Target Name="CopyContent" AfterTargets="Build">
  <ItemGroup>
    <ContentFiles Include="ContentFiles/*.png" />
  </ItemGroup>
  <Copy DestinationFolder="Debug/Content/"
        SkipUnchangedFiles="True"
        SourceFiles="@(ContentFiles)"
        UseHardlinksIfPossible="True" />
</Target>

これにより、他のソースファイルの状態に関係なく、変更されたファイルがコピーされます(つまり、コードをコンパイルする必要がない場合でも、MSBuildはコンテンツファイルが最新であることを確認します)。

于 2012-12-13T23:32:44.753 に答える
2

わかった!これに対する解決策を見つけました-いくつかのあいまいなMSBuild構文を使用します。moswaldの回答とオンラインでの調査に基づいています。

<Target Name="CopyContent" AfterTargets="Build">
  <ItemGroup>
    <DeployFileGroup 
      Include="**\*.json;**\*.png;**\*.wav;**\*.mp3;" />
  </ItemGroup>
  <Copy SourceFiles="@(DeployFileGroup)" 
    DestinationFiles="@(DeployFileGroup->'$(TargetDir)%(RecursiveDir)\%(Filename)%(Extension)')" 
    SkipUnchangedFiles="True" UseHardlinksIfPossible="True"/>
</Target>
于 2012-12-14T01:38:08.960 に答える