#この記事について
SpriteKitでゲームを開発する際に、数年前はXcodeのGUIを使わずにガリガリとコーディングするのが当たり前でしたが、最近はGUIによるアシストが充実してきて、Unityっぽく開発ができるようになりました。
この記事では、SpriteKit
でゲーム開発をする際の最初の一歩である「ビューにシーンを表示する」部分に焦点を当てました。
##ビューとシーン
UIKit
でアプリを開発する場合、ルートビューにどんどんビューを乗せていくカタチになります。
この時のルートビューとはUIView
クラスであり、サブビューは主にUIView
のサブクラスだったりします。
対してSpriteKit
でのゲーム開発では、ルートビューはSKView
になります。
また、ゲーム自体はシーンと呼ばれるSpriteKit
のSKScene
クラス内で描画されます。
つまり、SKView
(ビュー)にSKScene
(シーン)を表示させることになります。
このとき、ルートビューSKView
はデバイス画面サイズになっているわけですが、シーンSKScene
は開発者が適切な寸法にリサイズしてあげる必要があります。
#動作環境
Swift3.0.1
Xcode8.2
iOS10.2
#プロジェクト準備
iOSのSingle View Template
で新規プロジェクトを作成
ViewController.swift
ファイルの名をGameViewController.swift
に変更(ナビゲータエリア)
クラス名をViewController
からGameViewController
に変更(エディタエリア)
ビューコントローラのルートビューをSKView
に変更(インスペクタエリア)
##GameSceneクラスを定義
メニューバーから「File > New > File... > iOS > Cocoa Touch Class」を選択して、GameScene.swift
として保存
import SpriteKit
class GameScene: SKScene {
// something to do
}
##新規シーンファイルを作成
メニューバーから「File > New > File... > iOS > Resource > SpriteKit Scene」を選択して、GameScene.sks
として保存
##アンカーポイントとサイズ
図. 新規作成したシーンのファイル
サイズ(w:750, h:1334), アンカーポイント(X:0.5, Y:0.5)になっています。
サイズはiPhone7の4.7インチの状態、アンカーポイントはシーンの中央にある十字印です。
ちなみに、4.7インチのビューコントローラではビューのサイズは(X:375, Y:667)です。
シーンはピクセル単位、ビューコントローラはポイント単位になっていることがわかります。
#シーンを表示する
この状態でシーンをビューに表示すると、どんな風に見えるでしょうか。
シーンに表示する適当な画像を用意します。
図.適当な画像(background.png)
画像をプロジェクトにインポートして、シーンにドラッグ&ドロップで配置します。
シーンに画像を配置すると、スプライトノードになります。
スプライトノードは、シーンいっぱいに広げて枠とピッタリになるようにしておきます。
このシーンは、iPhone7(4.7インチ)の画面サイズになっています。
以下のように記述して、シミューレータに表示して見ましょう。
import UIKit
import SpriteKit
class GameViewController: UIViewController {
let gameScene = GameScene(fileNamed: "GameScene")
override func viewDidLoad() {
super.viewDidLoad()
if let skView = view as? SKView {
skView.presentScene(gameScene)
}
}
}
中央に寄ってしまって、全体が表示しきれていません。
次のようにコードを修正しましょう。
class GameViewController: UIViewController {
let gameScene = GameScene(fileNamed: "GameScene")
override func viewDidLoad() {
super.viewDidLoad()
if let skView = view as? SKView {
gameScene?.scaleMode = .aspectFill
skView.presentScene(gameScene)
}
}
}
これで、シーンをビューにピッタリ合わせて表示できるようになりました。