前々からMonoGameというゲームフレームワークが気になっていたのでMacで動かすところまでやってみました。ググっても全然情報が出てこなかったので、日本語で読める記事としてはかなり詳しいのではないでしょうか。
MonoGame - Write Once, Play Everywhere - Home
Monoとは
Monoは、Windowsが提供している.NETの資産をクロスプラットフォームで動かそうというオープンソースプロジェクトです。
C#はものすごく良い言語だと聞いているのですが、主にWindows環境でしか動作しなかったので、Macユーザーには嬉しいですね。
一昔前は微妙な感じだったんですが、最近ではUnityがMonoを採用しているなど、今後流行り出しそうな雰囲気があります。
MonoGameとは
MonoGameはMono上で実装されているゲームフレームワークです。マイクロソフトが開発したゲームエンジンXNAを高い移植度で再現しています。
MonoGameの特徴として以下の点が挙げられ、これらを聞くだけだと「ぼくのかんがえたさいきょうのゲームフレームワーク」に聞こえます。
高い移植性
非常に高い移植性を誇っており、様々なプラットフォームで動きます。
公式のREADMEによると
- iOS (including Retina displays)
- Android
- Windows (OpenGL, a DirectX 11 version is currently in development)
- Mac OS X
- Linux
- Windows Store Apps (for Windows 8 and Windows RT)
- Windows Phone 8
- PlayStation Mobile (currently 2D only)
- OUYA, an Android-based gaming console
で動きます。他にもXbox360でも問題なく動作するほか、WiiUへの対応が任天堂から発表されています。
Nintendo bringing MonoGame Framework to Wii U | Polygon
XNAとの互換性
MonoはXNA4.0との互換性を維持していて、XNA向けに書いたコードがそのまま走ります。後述しますが、過去にXNAで開発したゲームがほぼそのままクロスプラットフォーム化できました。XNA自体がかなり優れたプラットフォームなので、記述性の面でも非常に優秀です。
多くの採用実績
日本だと全く情報を聞かないのですが、海外だと徐々に名作が生まれています。
例えば、数々の賞を受賞したXBLAの『Fez』や、『Bastion』なんかはMonoGame製だそうです。
『Fez』は日本語版が出たあとにクリアしたんですが、なかなかおもしろい作品でした。
最近PS3で発売した『テラリア』もMonoGame上に移植なんかがされていたりします。
環境構築
はじめに
この手順は2013/10/29時点の情報です。 現状、大変残念な事になっていますが、将来的にもっと手軽に変更される可能性があります。
一応、Githubに公式のインストールガイドがあるのですが、はっきりってほぼ役に立ちません。
Tutorials · mono/MonoGame Wiki
今回は下記の記事がなかなか良い線行っていたので、この記事に沿って説明します。
Setting up a MonoGame Mac Application with Xamarin Studio | Jamie Ly
また、環境はこんな感じです。
Xamarin Studioのインストール
Xamarin StudioはMono環境向けのIDE。以前はMono Developという名称だったが、Version4.xからXamarin Studioになったみたい
ちなみに「ザマリン」とかって読みます。
Mono SDK for Macのインストール
こちらから。Mono MRE, Mono MDKいずれでも大丈夫だと思う。今回はMono MRE installerを選択
MonoMacのインストール
Xamarinにはパッケージマネージャーが組み込まれているので、そこからMonoMacを導入します。
Xamarin Studioを起動して、メニューバーからXamarin Studio > Add-in Manager > Gallery
を選択。
Mac Development
カテゴリ以下にあるMonoMacをインストール。完了したらXamarin Studioを再起動する
(もしかしたら環境によってはやらなくてもいいのかも?)
MonoGameのテンプレートをインストール
MonoGame - Write Once, Play Everywhere - Download: MonoGame 3.0.1
こちらからMonoGame for Xamarin Studioをダウンロードする。XamarinStudio.MonoGame_3.0.1.mpack
みたいなファイルが入手できればOK
上記同様にAdd-in Managerを開き、左下のInstall From File
から今入手したファイルを使ってMonoGame向けのテンプレートをインストールする。インストール後、再びXamarin Studioを再起動
MonoGameプロジェクトを作成する
File > New > Solution > MonoGame
からMonoGame Mac Application
を選択。適当に名前を付けると良い。
参照を変更1
この工程は説明のために書いていますが、結論から書くと正常に動作しません。 とりあえず動かしたい人は「参照を変更2」を参照してください
これでビルドは通るが、おそらく正常に起動しない。
参照したページによると、MonoGame.Frameworkをテンプレートに含まれている物から変更してあげる必要がある。
左側のナビゲーションペインから、Referencesを選択し、右クリック。Edit Refereces…
を選択する。
その後、.NET Assenbly
タブを開き、
~/Library/Application Support/XamarinStudio-4.0/LocalInstall/Addins/MonoDevelop.MonoGame.3.0.1/assemblies/MacOS/
下にあるMonoGame.Framework.dll
を選択してあげる。
また、右側に表示されている、元々追加してあるMonoGame.Framework.dllは削除する。
下記スクリーンショットのようになればOK
テクスチャが読めなくて死ぬ
ビルドする。今度は正常に一瞬だけWindowがでるが、下記のようなエラーで死ぬ
Method not found: 'MonoMac.AppKit.NSImage.AsCGImage'.
このようになぜかテクスチャが読み込めない。
結論から言うと、修正されたPull RequestがまだStableに取り込まれていないらしく、この方法では動かない。CIサーバーからunstable版を取得するか、自分でMonoMacとMonoGameFrameworkをビルドし直してあげると解決する。
Xamarin MonoMac DLL and MonoGame issue - xamarin
これに気付くのに数時間ハマった。最悪だった。
今回は簡単のため前者の方法を採る。
参照を変更する2
MonoGameのCIサーバーから最新版のビルドを取得する。develop-macジョブのLast Successful ArtifactsからMonoGame.Framework.dll
とMonoMac.dll
をダウンロード
「参照を変更する1」の方法と同様に、今取得してきたdllを参照してあげる。古い参照は消してください。
正直あんまり良い解決策ではないので、今後修正されると思います。
Hello MonoGame!
動いた!!!!
MonoMacを自分でビルドしたい(Optional)
CIサーバーから持ってくれば良いんですが、自分で心を込めてビルドしたいという方は下記の通りしてください
git clone https://github.com/mono/monomac
cd monomac
git submodule update
make
これでsrc
以下にMonoMac.dll
がビルドされます。よかったですね。
ゲームを作ろう!
これでやっとゲームが実装できるようになったのでひたすらがんばるだけです。
サンプルが下記に用意されているので、見ながらがんばってください。
基本的にXNAそのままみたいなので、XNAが使える方は取っつきやすいのではないでしょうか?(僕はほぼ使ったことがないのでこれから覚えます)
MonoGameでいろいろ
XNA製のゲームをクロスプラットフォーム化する
僕の運営している札幌ゲーム製作者コミュニティKawaz製のゲームにはXNAの資産で作られた物が多数ありますが、僕はWindowsでは開発しないので遊べないことが多かったです。
どれほどの互換性があるものなのか、試しに移植してみました。
上記の動画のように、割と高い移植性を誇っていることがわかりました。
諸事情で動画は削除させて頂きます。ごめんなさい
コードについても、ほぼ直す必要がなくてここまで30分ぐらい。 一部未実装のAPIがあるのと、パスの指定方法がWindowsと若干異なるなどの変更作業が必要ですが、ここまで再現度が高いのは驚きでした。
iOS, Androidで動かす
iOS/Android向けにビルドするにはXamarinが提供しているMonoTouchのライセンスを購入する必要があるようです。
Xamarin - Xamarin.iOS - Create amazing iOS apps with C# and .NET
$299買い切り。1年ごとの更新だったみたいです。ご指摘ありがとうございます。
一応試すだけならFree版があるんですが、32KBまでしかバイナリが出力できないという制限があって、ほぼ実用できない気がします。今度試します。
PS Vitaで動かす
やってみたいので今度試します。余談ですが、Vita向けの開発環境を最近構築したので、これ関係の記事も書きたいですね。
まとめ
日本人で使ってる人をほぼ見かけなかったので書いてみました。
動くまでは環境構築の項にあるとおりめちゃくちゃ面倒でした。これは流行らない。
特にMonoMacの敷居が高すぎて、辛い感じがしました。 どうやらCocoaをMonoでBindingしてC#で記述し、Objective-Cにコンバートしているという黒魔術らしい。 Macでビルドしてdllが生成される世界観がヤバかったです。
上記の点から、途中までは大したことないと思ったのですが、実際に動いてみると高い移植性と、記述の容易さに驚かされました。 想像以上に良さそうなので今後に期待ですね。
海外のインディーズゲーム界隈では最初に紹介したように、数々の名作がMonoGameで実装されているので、今後爆発的に普及するかも・・・・・・。