swift (with scenekit) で簡単な3dゲームを作ってみた

53
(with SceneKit) ででで 3D ででででででででで ででで でで

Upload: kazuya-hiruma

Post on 13-Jun-2015

10.708 views

Category:

Technology


4 download

DESCRIPTION

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

TRANSCRIPT

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

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

比留間 和也

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

比留間 和也

HTML ファイ部

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

比留間 和也

HTML ファイ部

技術部 x 人事部

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

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

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

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

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

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

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

作ったもの3D 的な

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

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

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

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

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

小話

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

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

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

orz

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

閑話休題

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

アジェンダ

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

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

• ライブコーディング

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

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

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

苦労した点 1Xcode6 beta の

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

と思って DL

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

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

wktk

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

orz

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

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

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

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

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

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

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

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

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

Xcode の設定で「 Other swift flags 」に

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

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

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

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

// 今まで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 の挙動も微妙に修正されたようです。

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

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

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

Objective-C との細かい違い

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Optional な型については

Qiita記事で

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

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

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

ObjC <-> Swift の相互連携

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

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

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

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

ライブコーディング

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

[DEMO]

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

ちょっとだけお知らせ

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

Lobi Rec SDK

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

Lobi Rec SDK って?

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

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

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

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

証拠の動画

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

SceneKit でも動いたよ!

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

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

[DEMO]

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

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