Swift (with SceneKit) で簡単な3Dゲームを作ってみた

Preview:

DESCRIPTION

第2回 Swift勉強会で発表した資料になります。

Citation preview

(with SceneKit) で簡単な 3D ゲームを作ってみた

比留間 和也

比留間 和也

HTML ファイ部

比留間 和也

HTML ファイ部

技術部 x 人事部

2 月頭に突然のiOSチーム異動

Lobi っていうアプリ作ってます

マイQiitaっていうアプリ出しました

作ったもの3D 的な

iOS8 でカヤックサイト見るとロゴが 3D に! ( ゚∀゚ ) !

実際に作ってきたゲームのデモ

小話

最初に付けた名前は「 Tappy Bird 3D 」

orz

閑話休題

アジェンダ

• Swift を書いてみて苦労した点

• 実際のアプリ制作の感触( Objective-C との違い)

• ライブコーディング

Swift を書いてみて苦労した点

苦労した点 1Xcode6 beta の

コンパイラの挙動が不安定

再コンパイルしようとしたらなぜか型が違うと怒られた (´ ・ ω ・

`)前回のコンパイルから何も変更してないのに (´ ; ω ; `)

• 最初に「 CGFloat 」にしろやって言われてCGFloat にしていたのに、次の時は CFloat にしろって言われる。

• println 関数にふたつの引数を渡したら、書いただけで Xcode が落ちた。

• しかもコードをパースするだけで落ちるので Xcodeからは編集不可→テキストエディタでそこだけ消してなんとか復旧。

苦労した点 2なぜか叱られる

• 補完も効くし、ドキュメント通りに書いているのに「 Symbol Not Found 」で叱られる。

• ObjC でブリッジを書いて解決。

// 受け取った SCNScene インスタンスに対して// 値を代入するだけの簡単なお仕事- (void)physicsWorld:(SCNScene *)scene gravity:(SCNVector3)gravity{ scene.physicsWorld.gravity = gravity;}

※ ちなみに Xcode6 beta3 では上記問題は解決したようです。

苦労した点 3Xcode6 beta3 でコンパイルエラー

「 Xcode beta3キタ━━━━ ( ゚∀゚ )━━━━!! 」

と思って DL

色々期待しながら起動し、実行

wktk

orz

なんにもしてないのにコンパイルエラーヽ ( `Д´)

ノ( beta2 は文句言わなかったジャン・・)

社内でそれを愚痴ると、デキるエンジニアの同僚が発見

どうやら arm64 向けコンパイル時に、コンパイラに渡してい

るオプションが違うとのこと(((( ;゚ Д ゚ )))) ファッ!?

Xcode の設定で「 Other swift flags 」に

「 -target-cpu cyclone 」を入れることで解決

苦労した点 4いきなり書式が変わる

// 今までvar a: Int[] = Int[]()var b: Int[] = [1, 2, 3, 4]

// Beta3 からvar c: [Int] = [Int]()var d: [Int] = [1, 2, 3, 4, 5]

※ ちなみに Array の挙動も微妙に修正されたようです。

実際のアプリ制作の感触( Objective-C との違い)

Objective-C との細かい違い

• イニシャライザは関数実行風に書ける。引数がある場合は、各々ラベルと引数を渡す。

• initWithXXX みたいな書き方や、 stringWithXXXみたいな生成用メソッドはなくなる。

• 「 NSString.class 」的な書き方は「 NSString.self 」に変更。

キャストの仕方はスカラー値とクラスで異なる

// スカラー値// 厳密にはキャストではなくコンバージョンvar a = 5var b = Float(a)

// クラスvar c = Hoge()var d = c as Fuga

Optional 型かどうかはしっかりと意識する必要がある

• Swift は基本的に nil の代入を許容していない。つまり、宣言した型に適合するなにがしかの値を入れておく必要がある

• でも nil を入れておきたいケースはある(例えば NSError など、一時的に宣言だけをしておいて参照を渡したり)

• そういう場合には「 Optional 」な型として変数を宣言する

// Optional な Int 型宣言の例var a: Int? = nil

// こちらはエラーになるvar b: Int = nil

// ちなみにこれを応用して以下のようなこともできるhoge.fuga?.foo?.bar()

Optional な型については

Qiita記事で

既存フレームワークとの連携

ObjC <-> Swift の相互連携

• ObjC で Swift のクラスを利用するには、 Xcode が自動生成する <#ProjectName#>-Swift.h ファイルを import する。

• Swift で ObjC なクラスを利用するには、 <#ProjectName#>-Bridging-Header.h を生成して、それに、 Swift で使いたいクラスのヘッダファイルを import する。

相互連携の細かいことはQiita記事見てね!

ライブコーディング

[DEMO]

ちょっとだけお知らせ

Lobi Rec SDK

Lobi Rec SDK って?

• スマホゲームに動画録画機能を付けられる!

• 実況プレイ動画も撮れる!

実況があるとゲームは格段に面白くなる!

証拠の動画

SceneKit でも動いたよ!

でも公式ではなくあくまで個人で入れてみただけですが

[DEMO]

ご静聴ありがとうございました

Recommended