この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
XamarinStudio for Macで「新しいプロジェクト」を開くと、iOSの中にGameのカテゴリがあり、「SpriteKit」「SceneKit」「Metal」「OpenGL」の4つが並んでいます。
Xcodeでは、Game(SceneKit)一択なのに比べると、贅沢な話です。
それぞれのプロジェクトをコンパイルしただけの様子が次の通りです。
※Metalは、実機でしか動作できないため、スクリーンショットなので止まってますが、実際はアニメーションしています。
今回は、このうちSpriteKitについて試してみました。
2 SpriteKit
題材は、毎度のことで恐縮ですが、「縄神さま」(モグラ叩き風)です。 せっかくのSpriteKitなので、エフェクトも追加してみました。 出来上がったものが、下記の通りです。 (ちょっと雑な感じですいません。)
さすがに、ネイティブです。楽勝でスピードが出ます。
そして、コードはこちらです。
https://github.com/furuya02/SpriteKitNawagamisama
既に、SpriteKitをご存知の方は、何の違和感もなく読めるのではないでしょうか。
なお、ちょっと注意が必要なのは、プロジェクト作成で、SKNodeまで自動生成されるのですが、これのScaleModeプロパティがSKSceneScaleMode.AspectFillになっていることです。
このモードによって、SKSceneの中での座標の扱いが変わってきますので、意図したものになっているかどうかを確認しておいた方がトラブルが少ないように思いました。
public partial class GameViewController : UIViewController
{
protected GameViewController(IntPtr handle) : base(handle)
{
// Note: this .ctor should not contain any initialization logic.
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
// Configure the view.
var skView = (SKView)View;
skView.ShowsFPS = true;
skView.ShowsNodeCount = true;
/* Sprite Kit applies additional optimizations to improve rendering performance */
skView.IgnoresSiblingOrder = true;
// Create and configure the scene.
var scene = SKNode.FromFile<GameScene>("GameScene");
//scene.ScaleMode = SKSceneScaleMode.AspectFill;
scene.ScaleMode = SKSceneScaleMode.ResizeFill;
// Present the scene.
skView.PresentScene(scene);
}
・・・ 省略
3 最後に
他のフレームワークは試していませんが、SpriteKitに関しては、全機能が綺麗にラップされているような感じがしました。 しかし、あのSpriteKitが、C#で書けてしまって、最後まで違和感を拭えません。
4 参考リンク
Sprite Kit Hello World
Make Games with Xamarin.iOS and Sprite Kit
ぴぽや ゲーム制作記と制作がてらにできた画像素材などを公開しています
[Developers.IO] Xamarin – シリーズ –
Xamarin 記事一覧 - SIN@SAPPOROWORKSの覚書