非プログラマ向けのXNAゲームの展開を促進する


12

現在、ベースとしてXNAのRPGスターターキットを使用して、RPGに取り組んでいます。(http://xbox.create.msdn.com/en-US/education/catalog/sample/roleplaying_game)私は小さなチーム(2人のデザイナーと1人の音楽/サウンドアーティスト)で作業していますが、私は唯一のチームですプログラマー。現在、次の(持続不可能な)システムを使用しています:チームがゲームに追加する新しい写真/サウンドを作成するか、既存のサウンド/写真を変更してから、現在のビルドを保持するリポジトリに作業をコミットしますすべての。(コード、画像、音声など)毎日かそこらで、新しいインストーラーを作成し、新しい画像、コードの変更、および音声を反映して、全員がインストールします。

私の問題はこれです。たとえば、チームの他のメンバーが戦闘音を置き換えることができ、構築するのを待たずにすぐに変更を確認できるシステムを作成したいです。XNAのセットアップ方法は、公開する場合、すべての画像ファイルと音声ファイルをエンコードするため、チームは「ホットスワップ」できません。Microsoft VSをすべてのコンピューターにセットアップして、すばやく公開する方法を示すことができますが、これを行う簡単な方法があるかどうかを知りたかったのです。

XNAを使用してチームで作業しているときに、誰かがこれに思いついていますか?


2
すべての画像と音声ファイルをXNAエンコードするということは、それらがXNAコンテンツパイプラインによって構築され、.xnbファイルに変換されるということですか?
デヴィッドゴーベイア

正確な拡張子は覚えていませんが、標準のパイプラインを通過します。
サル

回答:


12

まず第一に、毎回インストーラーを公開して作成する必要はないと思います。プロジェクトをビルドし、出力ファイル(つまり、EXEおよびContentフォルダーに加えて、使用しているDLLの依存関係)をリポジトリに配置するだけで、XNA redistがインストールされている限り、コンピューターでも実行する必要があります。

あなたの質問については、2つのソリューションを考えることができます。1つはマシンにVisual Studioをインストールすること、もう1つはゲームにいくつかの変更を加えることです。

  • Visual Studioをインストールし、XNAコンテンツパイプラインを介してアセットを渡すように指示します。コンテンツパイプラインプロジェクトを作成し、そこにファイルをドラッグしてビルドするだけです。次に、結果のXNBファイルをプロジェクトフォルダー内のファイルと交換し、EXEを実行して変更を確認します。

  • Windows向けに開発している場合は、コンテンツピップラインを介さずに実行時にアセットを元の形式で読み込むようにコードを変更できます。画像の読み込みにはTexture2D.FromStreamこの例のように)使用でき、音声の場合には、代わりに(この例のように)FMOD APIを使用するのが最良の解決策です。その後、アセットを直接交換してゲームを実行できます。

さらに物事を進めるために、ゲームを可能な限りデータ駆動型にすることもできます。これは基本的に、キャラクタークラスの統計や使用している画像や音声ファイルのパスなど、簡単に変更できるゲーム内のすべてのものをコードから取り出して外部テキストファイルに配置することを意味します(例:XML、JSON、INI)。次に、これらのファイルをテキストエディターで編集するだけでゲームの変更を確認でき、再構築する必要はありません。


1
迅速な対応ありがとうございます。私はあなたの2番目の解決策が好きです、そしてそこから生じた質問があります:VSに#IF DEBUGに似たスタイルのフラグを作成する方法がありますか?#IF NON_PRODUCTION_MODEそうすれば、この非実動呼び出しですべてのFromStream()呼び出しをラップできます。最後に、ゲームをプロダクションに送る準備ができたら、簡単にモードを切り替えて、サウンドファイルを再びエンコードできるようになります。
サル

1
@Salはい、それを行うことができます。こちらのドキュメントを確認してください
デビッドゴウベア

1
@Salデフォルトでは、Visual Studioはデバッグとリリースの2つのビルドプロファイルを作成します。から2つを切り替えることができBuild->Configuration Managerます。デフォルトでは、デバッグビルドにはDEBUGコンパイルシンボルが定義されています。これは、非リリースコードをでラップできることを意味します#if ( DEBUG ) doStuffIWouldntDoInRelease(); #elif theActualReleaseCode(); #endif
サイファー

1
@Salまた、bin / *ディレクトリーをリポジトリーに含めるだけで、デザイナーおよびアーティスト/ qaがbinフォルダーをチェックアウトするだけで、最新かつ最高の実行ができるようになる方がはるかに簡単であることがわかりました。そうすることで、すべての依存関係、テクスチャ、オーディオなどをすべてまとめて取得します。それから毎日、彼らがしなければならないことはsvn update彼らの作業ディレクトリにあり、彼らは最新の状態にありました。
サイファー

4

パーティーに少し遅れましたが、ここに私の考えがあります。

私は、既存のコードベースを変更するようなものは何も伴わない3番目の可能性に行きます。これは、たとえばビルド後のスクリプトを使用して、出力ディレクトリのどこかにバイナリ(コンパイルからの実際のゲーム.exeおよび関連する.dll)をコミット(およびコピー)する場合に機能します。以降、Visual Studio 2010とXNA Game Studio 4.0について話していると仮定します(手順は他のバージョンでも非常によく似ています。いくつかの数字を置き換えるだけです)

そのため、次の手順で、.slnソリューションが存在するプロジェクトのルートにスクリプト(.cmd)を作成します。

  1. 「Visual Studio 2010コマンドプロンプト」を呼び出します。

    「C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ vcvarsall.bat」x86を呼び出します

    これは、スクリプトがXNAライブラリ、および必要なすべてのツールとバイナリを見つけることができるようにするためです。

  2. コンテンツプロジェクト(.contentproj)でMSBuildタスクを呼び出します。

    msbuild / property:XNAContentPipelineTargetPlatform = Windows / property:XNAContentPipelineTargetProfile = Reach mygame.content / projectfile.contentproj

    指定された異なるプラットフォーム/プロファイルによってプロパティを変更できます。さらに多くのプラットフォーム(Windows Phone、Xbox 360、またはWindows)のコンテンツを作成することもできます。プロファイルには、ReachまたはHiDef(http://msdn.microsoft.com/en-us/library/ff604995.aspx)があります。

  3. リポジトリーにバイナリーと実際のゲームが保存されているフォルダーに出力を再帰的にコピーします。

    xcopy / d / y / i / e bin \ x86 \ Debug \ Content * .. \ game_output \ Content

    フラグの詳細については、コマンドプロンプトで呼び出すことができますxcopy /?。重要なものは次のとおり/dです。変更されたファイルのみをコピーする-多くのアセットがある場合は、既存の未変更のファイルを何度もコピーしないことが便利です。/y既存のファイルを自動的に上書きして、新しいバージョンで更新できるようにします。私が使用しxcopyたのは、通常のcopy方法ではフォルダを再帰的にコピーできないためです。おそらく、フォルダとサブフォルダ内のコンテンツを構造化しています。さらに、通常よりも優れていますcopy(さまざまなフラグがたくさんあります)。

  4. pauseスクリプトがユーザー入力を待つように呼び出します。これは、ビルドが正常でエラーが発生していないかどうかを確認するのに役立ちます。

これで、コンテンツファイルを変更するアーティスト(またはだれでも)は.cmdスクリプトをダブルクリックするだけで、新しいコンテンツがビルドされ、コミットされたアーティファクトがテストされる準備ができている出力ディレクトリにコピーされます。

ただし、小さな問題があり、Davidの投稿の最初のポイントにフォールバックする必要があります。アーティストがファイルを追加/削除/移動してコンテンツプロジェクトを変更する場合は、 Visual Studioでプロジェクトを作成します(またはプロジェクトファイルを手動で編集します。先ほど言ったように、これは小さな問題です。なぜなら、彼らはリポジトリ内の新しいファイルをコミットするだけでした。

このアイデアについて、Shawn Hargreaveasはmsbuildとコマンドラインからのコンテンツプロジェクトの構築についての記事を投稿しました:http : //blogs.msdn.com/b/shawnhar/archive/2006/11/07/build-it-ahead-of-time .aspx彼の解決策は新しいファイルを作成することでしたが、既存のプロジェクトファイルを直接使用する方が簡単で保守しやすいと思います。

PS:長い投稿xDでごめんなさい

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.