« XNAベースのゲームをAndroidに移植する方法 | トップページ | XNAベースのゲームをAndroidに移植する方法(その3) »

XNAベースのゲームをAndroidに移植する方法(その2)

XNAベースのゲームをAndroidに移植した時に実施した手順は以下の通り。

まずExEnを動かすために必須のMono for Android(フリー版)をダウンロードしてインストールする。Android SDKも必要だった気がする。

その後、ExEnに同梱のドキュメント(Porting Check List)を見ながらやるも、その通りできない。そもそもiPhoneやSilverlightへの移植方法になってるし。。。ExEn関連の資料少なすぎ。。。(;´д`)トホホ…

そこで、Mono for Androidの仕組みから、こうなるはずだという想定で作業していくことにした。まず、ExEn同梱の"BlankGame Android.csproj"というプロジェクトをベースにする。ちなみにMonoTouchはiPhone用なのでだまされないように。

BlankGameプロジェクトを使って、デフォルトのActivityから自分のゲームのエントリ(Game1クラス)を呼び出すようにする必要があるはず。さらに、自作ゲームは本物の(Microsoft製の)XNAアセンブリを参照しているので、ExEnのアセンブリ(XNAの代わりになるもの)を参照する必要があるはず。

<作業内容>

"BlankGame Android.csproj"のファイル名は適切なものに変えておき(BlankGameのままでも良いので、ここではそのままにする)、csprojファイルをテキストエディタで開いて(1)RootNamespaceを自作ゲームに合わせて変更、(2)AssemblyNameも適切なものに変更、(3)ProjectGuidは後でVisualStudioが自動生成してくれるので削除しておく。

VisualStudioのソリューションエクスプローラーで自作ゲームのソリューションを右クリックして[追加]-[既存のプロジェクト]からExEnのBlankGameプロジェクトを追加する。BlankGameの"Android Activity.cs"ソースを開き、名前空間を自作ゲームの名前空間に変え、

game = new BlankGameGame();

の行を、自作ゲームのエントリ(Game1など)をnewするように変更する。BlankGameGameクラスは不要なので、BlankGame.csはプロジェクトから削除しても良い。BlankGameプロジェクトをスタートアッププロジェクトにする。

VisualStudioのソリューションエクスプローラーで、自作ゲームのXNAプロジェクトの参照アセンブリ一覧から、XNA関連(本物のMicrosoft製XNAアセンブリ)の参照をすべて参照解除する。そして、ExEnのアセンブリ(ExEnCoreとExEnAndroid)を参照に追加する。あ、これをするために、事前に、自作ゲームのソリューションにExEnのExEnAndoird、ExEnCore、ExEnCommonの3プロジェクトを追加してそれぞれをビルドしdllを生成しておく。(プロジェクト参照でもいいだろう)

さて、コンテンツも移植しないといけない。まず、ExEn(Android)でサポートされていない形式のファイルがあれば、サポートされているものに変更しなければならない。(wma→mp3など)。mp3やwav、pngなどはサポートされているのであまり問題にはならないだろう。そして、コンテンツフォルダ自体をBlankGameプロジェクト直下にコピーし、コピーしたContentフォルダをBlankGameプロジェクトに追加する。XNAプロジェクトでは、デフォルトで、Game1のコンストラクタでContentRootを"Content"というフォルダ名にしているので、ContentフォルダをBlankGame直下に置くのだ。ContentRoot名を変えている場合はそれに合わせる。

さらに、全てのコンテンツファイルのプロパティで[ビルドアクション]を[Android Asset]にする。これはとってもメンドクサイのであるが、しとかないとLoadできないので、やっておく。

(ExEnの作者は、将来、ここまでの作業を自動的に行えるようにするつもりのようだ。ぜひ、そうしてほしい。)

コンテンツに関してもう一つ重要なことは、ゲームのソースコードでLoad時に指定しているアセット名と、コンテンツのファイル名を厳密に一致させておく必要があるってことだ。Windowsでは、Game.Content.Load()に指定するassetNameとコンテンツファイルのプロパティで指定したAssetNameの大文字小文字は区別されない。しかしAndroidはLinuxベースのためか、大文字小文字が区別されるので、ファイル名とアセット名の大文字小文字があっていないと、Loadでファイルが見つからないという例外となる。これを合わせていくのも一苦労なのだが、仕方ないのでやる。

続きは次回...

|

« XNAベースのゲームをAndroidに移植する方法 | トップページ | XNAベースのゲームをAndroidに移植する方法(その3) »

XNA」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/543635/53693983

この記事へのトラックバック一覧です: XNAベースのゲームをAndroidに移植する方法(その2):

« XNAベースのゲームをAndroidに移植する方法 | トップページ | XNAベースのゲームをAndroidに移植する方法(その3) »