ゲームが作れる!新人iPhone開発者のためのSpriteKit入門

新人iPhoneディペロッパーをにとってゲーム開発は、一つの大きな壁なのではないでしょうか。

「ツール系のアプリは作れるようになったけど、ゲームはちょっとハードル高いなー」って方に朗報です。

XcodeにはSpriteKitっていうゲームを作成するためのフレームワークがあるのです!
これで新人でも簡単にゲームアプリが作れちゃいます。


SpriteKitで作るiPhoneゲーム入門
1.プロジェクトを立ち上げてみよう
2.パーティクルで見栄えをよくしよう
3.ゲームを作ろう
 3.1.仕様を考えよう
 3.2.ターゲットや対象となるオブジェクトの作成
 3.3.接触したときの当たり判定を実装しよう


 

1.プロジェクトを立ち上げてみよう

まずは、触ってみましょう。プロジェクト立ち上げて実行します。

スーパーマンみないなアイコンを選択します。デザインが一際目立ちますね。なんかフラットデザインに合ってないような…
スクリーンショット 2014-05-05 23.19.43

 

立ち上げてみます!

触ったら戦闘機が永遠に増えていく…なんか怖いですね…

 

===========================================================
デフォルトであったファイルです。

・MainSceneクラス
・ViewControllerクラス
・AppDelegateクラス
===========================================================

 

MainSceneにおもに画面のレイアウトを書いていて、ViewControllerでSpriteKitのView貼っつけてその上にSceneとして取得しています。

 

ViewController.mのviewDidLoadが画面をロードした後に呼ばれるメソッドなのですが、そこで見慣れないクラスがちらほらあります。

①SKView:SpriteKitのSpriteなどをのせる基礎となるViewです。
②SKScene:ゲーム内にある場面毎に用意する素材で基本的に一つです。

ちなみにSpriteはゲームに登場する「敵」であったり、「主人公」であったり、いわゆる背景とは違い、独立的に動作する絵みたいなイメージです。

showFPSとshowNodeCountが右下の数値です。FPSはFrame Per Second。要するに1秒に何フレーム?みたいな意味です。もっと言うとパラパラ漫画みたいな要領です。

showNodeCountはそのシーンに対して何Nodeあるかです。ちなみに上の画面ではラベルと戦闘機がNodeですね。

どちらもYESだから見えるんですよー!!
次はMainSceneです。

 

解説はコメントにて。
基本的なことはSceneに書けば、いいんですよ〜。

 

戦闘機がぐるぐると怖いので、
少し戦闘機らしい動きをしてもらいましょう!

これで降下して発進!みたいな感じですね!うん!怖くなくなりましたね。

 

そしてこの一行を足すだけで仮想的な重力を適用できます!

是非試して下さい!(挙動は少し変ですが…)


 

2.パーティクルで見栄えをよくしよう

パーティクルってなんぞ?と、思った方は多いのではないでしょうか…
パーティクル・システム(英: particle system)はコンピュータグラフィック技術のひとつで、型のレンダリング技術では再現が難しい、ある種の曖昧さを持った事物をシミュレートするために使われる。(by.wikipedia)

つまり花火や星空や雨など表現するのに適したシステムです。

Spritekitはそれを簡単に追加できます!!
いやほんと超簡単ですよ!
まずXcodeに用意されています。

こんな感じで…
スクリーンショット 2014-06-02 18.02.15
そう!新規ファイルを追加するかの如く、導入出来ます。というより右クリック>NewFile>Resourceですから如くではなく、普通に新規ファイルですね。

とりあえず入れちゃいましょ。

テンプレートも用意されていて至れり尽くせりですね。テンプレートは以下の8つです。

===========================================================
・Bokeh
・Fire
・Firefiles
・Magic
・Rain
・Smoke
・Snow
・Spark
===========================================================

今回はFireを導入します。すると、sksという見慣れない拡張子のファイルが生成されます。
中身はこんな…
スクリーンショット 2014-06-02 18.16.43

右のパラメータを弄ればいろいろ変化します!結構綺麗で楽しいので是非試して下さい。

では次にコードの方に導入してみましょう。タッチした際、その座標に出現するようにしましょう。
Fireはパーティクルノード(パーティクルとパーティクルシステムを作成・制御するもの)が出っぱなしなので少し燃えたら勝手に鎮火するようにしましょう!

ParticlesのMaximumに0以上を与えてやると勝手に消えます!
1とかではしょぼいので50~200くらいで。

これだけで発生します。試して下さい!

時には燃え上がるHelloWorldもいいですね!
これだけでも、とてもゲームの案が浮かび上がりませんか?


 

3.ゲームを作ろう

サンプルゲームを作ってみましょう!

3.1.仕様を考えよう

ゲームを作る上で重要なことはデザインであったり、コンセプトであったりと、山ほどあります!

ですが今回は「SpriteKitの使い方」なのでまずゲームの仕様だけを考え、その実装方法を解説していこうと思います!

===============================================
1.画面タッチで飛行機が発射!
2.飛行機から爆弾投下!
3.画面下部にある玉?共に爆発!
===============================================

仕様はこんな感じです。

今回のポイントは簡単に取り入れられちゃう重力世界ですね!
是非、下記のサイトを参考にして下さい!
公式リファレンス
参考にしたサイト1
参考にしたサイト2

そんでもって当たった際はパーティクルエフェクトを用いようと思います。さらに今回はBGMやSEなんかもいれちゃおう!

3.2.ターゲットや対象となるオブジェクトの作成

1章で作ったプロジェクトをベースとします。
1.プロジェクトを立ち上げてみよう

このベースプロジェクトに玉みたいなターゲットを作ります!

よく見る描画するやり方をSKNodeに適用しています!これでボールを生成するインスタンスメソッドが完成しました。ここでRandというメソッドがありますが、これは少し考えてみましょう。。。

詳細は以下です。

Randメソッド:引数1から引数2の範囲でランダムの値を生成。
戻り値:float型
引数1:float型
引数2:float型

この実装はゲームを作る上で必須項目です。ここをしっかり理解すればたくさん応用できますよ。

このメソッドを

上記のfor文でたくさん呼んじゃおう!気付いた方もいらっしゃると思いますが、物理エンジンを導入しています。これだけでボールがランダムに描画されたポジションからブワっと下に落下します!(実際は速くて確認しにくいですが…)
気付かなかった人は読み飛ばしてますね…
ballノードは半径rの円に対して面積全体に適用しています。基本的にSpriteKitはこれで物理エンジンを加味してくれます!
例えばSpriteをaddChildした場合はbodyWithRectangleOfSizeメソッドの引数にそのSpriteのsizeを与えると適用されるんです!!
なんと便利な…

次にタッチする際に前々回の記事で作成した飛行機と同時に
ぽろっと落下する爆弾を作りましょう!

これで下の画像のような感じになります。デザインが全然イケてないのはこの段階では多めにみてください。

IMG_0008

3.3.接触したときの当たり判定を実装しよう

当たり判定はゲームを作る上で不可欠な要素です。ですが実際は非常にめんどくさいのです。それがSpriteKitではとても簡単に実装できちゃいます!さっそく判定を追加してみましょう。
まずはコチラのグローバル領域に以下を宣言します。

このグローバル変数は、当たり判定を行う際の区別する定数として用います。

各々、生成時に以下のように与えます。

さらにbombには以下を追記します。

上記の三つの追加したコードがまず当たり判定の際の分類相互作用になります。

そして次にコンタクトデリゲートをシーンに適用してデリゲートメソッドを実装します!

うむ。。。。。これで当たり判定を組み込んだゲームらしい実装が出来たんですよ!

ビルドして遊んでみましょう!まだいろいろ問題はありますが…

ここまでの知識が身に付けば自分でもゲーム作れるんじゃない?

となるのではないのでしょうか….そう!
自分でもゲームが作れるんです!!

ですが、SpriteKitは多機能で、もっと多くの物理空間やアニメーションを用意してくれているんですよ。それを取り入れてより面白いゲームを作ってみましょう!よりゲームらしい工夫を凝らしていきましょう!

それでは!

田村昂之

WEB・スマホエンジニア (2014年 入社)プロダクトデザイン事業部
自称ビジネスエンジニア見習い。技術力の向上はもちろんのこと、 ビジネスマンたるその他のスキルの習得に日々精進している。 内定者研修では、ほぼ独力で4つのアプリをリリースする活躍を見せたが、 「独走しすぎwww」と多方面から顰蹙をかってしまった。。。
このエントリーをはてなブックマークに追加