XNA(あるいはClickTeamのXNA Exporter)が3つのハードウェア向けの書き出しに対応している…という件について。
実際にウィンドウズPC用にXNAでビルドしても、Visual C#あるいはVisual Studioをインストールしていない環境に持っていった場合、まず構成ファイル不足でXNAアプリケーションを動かすことができませんでした。
CTのJeffがサンプルでアップロードしてくれたファイル>●Spacer_Published
しかしJeffのサンプルもGameServiceが使用されているためXNA Framework Redistributable 4.0(再頒布可能)なパッケージだけでは動かないです。そこでソースコードに少しだけ手を入れて改造しました。
1:spacer_custom(XNA Framework Redistributable 4.0で動く版のEXE版)
2:Spacer_source_custom(手を加えた版のソースコード)
ちなみにカスタム版は動作確認をWindows XPの仮想環境下で行っています。これにはVC#とGS4.0はインストールしてません。純粋にXNA Framework Redistributable 4.0のインストール等、通常の手段で動かすことが出きるはずです。
結局Microsoftに登録が必要だというのはFrancoisの勘違いだと思う(あるいはこちらの質問の仕方が悪かったか)。必ずしももGameServiceに依存するXNAアプリを配布するとは限らないわけで、Jeffのファイルも使わないで動作確認できるんだから、現在使ってないならGameServiceは最初から全部コメントアウトすればええやんか、いうわけです。
開発者はVC#やVSが入っていて当たり前なので、この当たり前のことに気がつきにくいのですが、開発者以外にそんなもんを入れてる人は皆無だという意識にここでたどり着くのです。
この項目は現在書きかけの項目です
結論から言うと、不足しているXNA Frameworkをアプリ内にふくめてビルドすることができないのかとか、GS4が必要とかおかしくないかなという点。よくわからん。XNA Frameworkをダウンロードすればいいはずなんだけど実際には動かない。VC#の設定かソースコードに手を入れれば解決できる気がするんだけど。ソフト屋 巣さんが移植した龍神録XNAにサンプルとしてXNA19実行パックという実行だけをしてみたい人用というビルドがあったのでダウンロードしてみる。.NET 3.5だったがGS4.0をインストールしてない環境で試してみる。ClickOnceが機能するので必要なものを勝手にダウンロードしてくれる。ClickTeamのJeffが作ってくれたサンプルもClickOnceを使っているのだが、あれだと構成ファイルが不足して動かない。で、今回は違うエラーが発生。ClickOnce役に立たないというのは本当みたい。拡張フレームワーク:コンテント・パイプラインが足りない?=PC/Xbox360の両プラットフォームで最適に動作するコンテントを容易に扱うことができますってものらしいけどこのままだと容易にっていうか一般向けに配布するってレベルじゃねーす。
現在のXNA exporterのデフォルトの設定について。
まずHidef、これはシェーダーバージョン3.0対応のグラフィックカードが必要でMMF2のHWAでは基本的にシェーダーバージョン2.0以上が必須と言われていたのでXNAに関しては要求スペックが暗黙的に上がっている。ただしこれはGame Studioの設定から簡単に変えることが出来るので「Reach=シェーダー2.0へ強制的に落とす設定」にすれば古い環境でも動く場合があります。実際に仮想環境がシェーダーバージョン2.0までの対応だったので設定を変えることで動いたのを確認できています。
あとはなぜかよくわからないけど現在MMF2から吐き出されるソースコードにはXNA Frameworkの再頒布可能ファイルリストに含まれないコンポーネントがデフォルトで利用されています。これが原因でXNA Framework 2~4すべてをダウンロードしてインストールしても構成ファイル不足で永遠に動きません。なぜならばXNA Frameworkの再頒布可能に含まれていないコンポーネントはGame Studio 4.0をインストールしない限り利用が許可されていないから。XNA Framework 3.x辺りから「ClickOnce」という構成ファイルに不足があった場合、不足分を勝手にダウンロードして補ってくれる便利機能がついているんですが「ClickOnce」を使っても再頒布不可なコンポーネントまではダウンロードしてくれません。これじゃあ「ClickOnceは役立たず!」とか言われちゃうのは、まぁ仕方ないかと思います。ちなみに例えばエラーログの内容が「GamerServicesNotAvailableException」とかなら「LIVE-specific 」を使っているからこのエラーが出るんだって理屈では分かるんですが、実際にはまだこんな機能触っていないしMMF2から使ったオブジェクトは「String」と「Active」だけなのにこのエラーが出るってーのは・・・おかしくね?ってことです。
ちなみにコンポーネント不足のエラーは海外でも探すと結構トラブルがあって前述の「GamerServices」以外にも「コンテンツ・パイプライン」が再頒布不可でトラブルの原因となってる。このように本来便利機能のはずの「ClickOnce」という機能が実は一定のルールで落としてくるファイルと落とさないファイルを区別してる。これは使ってもいいけどこれは許可してないから情弱にはツカワセネーヨって、まぁ事情は良く分かるんですがそれなら先に周知しておいて欲しいなーって思うわけで。
このようにXNA Frameworkの再頒布可能ファイルから外れているコンポーネントの利用については、まず不足しているコンポーネントを使う意志がまったく無い場合、今後はこれもたぶんソースコードから該当部分を回避するように少し細工してからビルドすれば良いと思うのですが、具体的にどこをコメントアウトすればいいのかまだわからんから、しばらくVC#とGama Studio 4.0のインストール以外にPC用で動かせるXNAアプリは提供できる目処が立ちません。不足してるコンポーネントはこの二つをセットでインストールしない限り手に入らないのです。
一度フルスクラッチでC#弄りながら検証しないとさっぱりわからないず。
XNA2導入チェッカーを試してみた。.NET 2が足りないと?うそん。でもダウンロードしてインスト。Microsoft XNA Framework Redistributable 2.0をインストしたら「XNA シューティング for Windows」というバイナリは動いた。やった!なんだこれ!
これでようやく僕の作った糞アプリも動くんですね?わかりますとか思ったら自分のはおろかJeffのも動かねーし。ちなみに「XNA シューティング」はXNA Game Studio Ver 1.0 β1 のデータらしい。
バイナリをいろいろ試したがXNA Framework Redistributable 2.0のインストールで済むものは動くようになった。しかしXNA Framework 3.5以降のものがさっぱり動かない。インストールしたばかりのXP環境があっというまに汚れまくりでもはやなにがなんだかわからない。
MSDNによる注意書き:Additional Notes for Windows Applications
XNA for PCでビルドしたアプリを他人の環境でも動かすためには最低でも「XNA Game Studio 4.0(2010年9月16日から正式公開)」というゲーム開発用の統合開発環境(IDE)がインストール済みでなければならないという…これが一般配布用としては大変高い壁となります。そしてここから少々ややこしいのですが、XNA Game Studio 4.0(※以降GS4と略す)はMicrosoftのVisual Studioに対応しているという点。つまりGS4は統合開発環境なんだけど、マネージにはC#が必要になるからC#で開発するためのIDEが必要となる…つまりVisual StudioもしくはVisual C#が要る。つまりGS4をインストールする以前にVC#かVSがインストールされていないとGS4もインストールできないんですね。
これのスタンドアローン判をダウンロードすると動かせる?>無理
http://blogs.msdn.com/b/ito/archive/2010/09/16/xna-game-studio-4-0-released.aspx
Microsoft XNA Framework Redistributable 4.0
Microsoft XNA Framework Redistributable 3.1
XNA Framework 再頒布可能ファイルには、Content Pipeline Build Runtime が含まれていません。実行時のコンテンツの構築は、XNA Game Studio が Windows ベースの開発コンピューターにインストールされている場合にのみサポートされます。
Games for Windows – LIVE は開発したゲームでは使用できません。この機能は XNA Framework の再頒布可能バージョンには含まれていません。XNA Game Studio をインストールせずに、これらのコンポーネントを使用するゲームを実行すると GamerServicesNotAvailableException が発生します。
結局上記のような結論になるのか。XNA Framework 再頒布可能ファイルに含まれていないコンポーネントが使用されているとしか思えない。自分がビルドしたものにはLiveの機能を使ってないけど、CTのエクスポーターには製作者が何か意図しない部分でコンポーネント依存がある可能性が。GamerServicesNotAvailableExceptionやコンテント・パイプラインが足りないってのはそういうことなんだと思う。つまり現状だとVC#やVSなど統合開発環境のインストとGS4のインスト、この二つは不可欠になってしまっている。
problems publishing my xna 4.0 game as clickonce
clickonce installer not working on a fresh pc
Xna.Framework.GamerServices are not included in the XNA Framework redistributable.
so they can only be used on a computer that has the full XNA Game Studio product installed.
how do i share my xna game on windows?
XNA for PCが動かない人用:インストール手順とか必要な構成ファイル一覧とか
検証は仮想環境だから成功したら固有ハードウェアによるドライバとか依存は少ないはず。
1:クリーンインストールしたWindows OS一丁(検証用はXP SP3)
2:クリーンインストールして最新アップデート適用後は.NETは1.1から3.0までをインストール済みと確認。
◆ここからたぶん必要なもの。(トライパターン1:VC#編)
Visual C# 2010 Expressのダウンロード:約153MB
Visual C# 2010 Expressをインストールすると自動的にVC 9.0 Runtimeと.NET 4.0がインストールされます。インストールオプションから選択できるSQLとSilverlightは今回インストールしません。インストール後にWindows アップデートを実行して最新の環境へ更新します。主な更新の内容は.NET1~4までのセキュリティ更新プログラム一式。
VC#の準備が整ったら次にXNA Game Studio 4.0のインストールを行います。XNA Game StudioのサポートするOSはXP以降。ちなみにWindows PhoneのSDKはXPをサポートしていません。OSがWindows 7 と Windows Vista の場合、システム特権のある管理者権限が必要。>解説はMSDNより一部抜粋
XNA Game Studio 4.0:仕様とか説明書
XNA Game Studio 4.0:ダウンロード
APP Hub:Phone用のSDKダウンロードなど(今回は出番無しの予定/Microsoft Windows Phone Developer Tools は Windows XP をサポートしていません。これはWindows Phone用の XNA Framework ゲームの実行やデバッグを行うには、少なくとも、DirectX 10 をサポートするグラフィックカードと、それをサポートする WDDM 1.1 ドライバが必要になるためです。)>ハードウェアとオペレーションシステムの要件
Microsoft Visual Studio 2010 Service Pack 1 (インストーラー)
Visual Studio 2010 SP1 には Microsoft .NET Framework 4 に対する更新プログラムが含まれます
●今回はこれだけで動きました。
VC#とGS4.0のインストール及びウィンドウズアップデート、この手順だけで動かせます。
テストしたのが仮想環境だったのでシェーダーモデル2.0までの対応です。故に「HiDef設定=要シェーダーモデル3.0」では動作確認ができなかったため、Visual C#のインターフェースからGame Studioにアクセスしてプロファイルを「Reach」に変更する処置が必要になりました。これは要シェーダーモデル2.0に落とす設定です。
参考:MSDN
———————————————————————
DirectX 9.0c DirectX エンド ユーザー ランタイム
———————————————————————
.NET4.0
XNA Framework
DirectX 9.0c DirectX エンド ユーザー ランタイム
しかしこれだけだと動かない人がいるっぽいのでこれをまず検証。
先にVC#にXNA GameStudioをインストールするとどうなるかを検証します。