Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

15,962 views

Published on

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

Published in: Technology
  • Be the first to comment

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

  1. 1. (with SceneKit)で 簡単な3Dゲームを作ってみた 比留間 和也
  2. 2. 比留間 和也 の HTMLファイ部
  3. 3. 比留間 和也 の HTMLファイ部 技術部 x 人事部
  4. 4. 2月頭に突然の iOSチーム異動
  5. 5. Lobiっていうアプリ 作ってます
  6. 6. マイQiita っていうアプリ出しました
  7. 7. 作ったもの 3D的な
  8. 8. iOS8でカヤックサイト見るとロゴが3Dに!(゚∀゚)!
  9. 9. 実際に作ってきた ゲームのデモ
  10. 10. 小話
  11. 11. 最初に付けた名前は 「Tappy Bird 3D」
  12. 12. orz
  13. 13. 閑話休題
  14. 14. アジェンダ • Swiftを書いてみて苦労した点 • 実際のアプリ制作の感触(Objective-Cとの違い) • ライブコーディング
  15. 15. Swiftを書いてみて 苦労した点
  16. 16. 苦労した点1 Xcode6 betaの コンパイラの挙動が不安定
  17. 17. 再コンパイルしようとしたらなぜ か型が違うと怒られた(´・ω・`) 前回のコンパイルから何も変更してないのに(´;ω;`)
  18. 18. • 最初に「CGFloat」にしろやって言われてCGFloat にしていたのに、次の時はCFloatにしろって言われ る。 • println関数にふたつの引数を渡したら、書いただけ でXcodeが落ちた。 • しかもコードをパースするだけで落ちるのでXcode からは編集不可 →テキストエディタでそこだけ消してなんとか復旧 。
  19. 19. 苦労した点2なぜか叱られる
  20. 20. • 補完も効くし、ドキュメント通りに書いているのに 「Symbol Not Found」で叱られる。 • ObjCでブリッジを書いて解決。
  21. 21. // 受け取ったSCNSceneインスタンスに対して // 値を代入するだけの簡単なお仕事 - (void)physicsWorld:(SCNScene *)scene gravity:(SCNVector3)gravity { scene.physicsWorld.gravity = gravity; } ※ちなみにXcode6 beta3では上記問題は解決したようです。
  22. 22. 苦労した点3 Xcode6 beta3で コンパイルエラー
  23. 23. 「Xcode beta3 キタ━━━━(゚∀゚)━━━━!!」 と思ってDL
  24. 24. 色々期待しながら 起動し、実行 wktk
  25. 25. orz
  26. 26. なんにもしてないのに コンパイルエラーヽ( `Д´)ノ (beta2は文句言わなかったジャン・・)
  27. 27. 社内でそれを愚痴ると、 デキるエンジニアの同僚が発見
  28. 28. どうやらarm64向けコンパイル 時に、コンパイラに渡している オプションが違うとのこと ((((;゚Д゚)))) ファッ!?
  29. 29. Xcodeの設定で「Other swift flags」に 「-target-cpu cyclone」を 入れることで解決
  30. 30. 苦労した点4いきなり書式が変わる
  31. 31. // 今まで 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の挙動も微妙に修正されたようです。
  32. 32. 実際のアプリ制作の感触 (Objective-Cとの違い)
  33. 33. Objective-Cとの細かい違い • イニシャライザは関数実行風に書ける。引数がある 場合は、各々ラベルと引数を渡す。 • initWithXXXみたいな書き方や、stringWithXXXみた いな生成用メソッドはなくなる。 • 「NSString.class」的な書き方は「NSString.self」 に変更。
  34. 34. キャストの仕方は スカラー値とクラスで異なる // スカラー値 // 厳密にはキャストではなくコンバージョン var a = 5 var b = Float(a) // クラス var c = Hoge() var d = c as Fuga
  35. 35. Optional型かどうかはしっか りと意識する必要がある • Swiftは基本的にnilの代入を許容していない。つまり 、宣言した型に適合するなにがしかの値を入れてお く必要がある • でもnilを入れておきたいケースはある (例えばNSErrorなど、一時的に宣言だけをしておいて参照を渡したり ) • そういう場合には「Optional」な型として変数を宣 言する
  36. 36. // OptionalなInt型宣言の例 var a: Int? = nil // こちらはエラーになる var b: Int = nil // ちなみにこれを応用して以下のようなこともできる hoge.fuga?.foo?.bar()
  37. 37. Optionalな型については Qiita記事で
  38. 38. 既存フレームワーク との連携
  39. 39. ObjC <-> Swiftの相互連携 • ObjCでSwiftのクラスを利用するには、Xcodeが自動 生成する<#ProjectName#>-Swift.hファイルをimport する。 • SwiftでObjCなクラスを利用するには、 <#ProjectName#>-Bridging-Header.hを生成して、 それに、Swiftで使いたいクラスのヘッダファイルを importする。 相互連携の細かいことはQiita記事見てね!
  40. 40. ライブコーディング
  41. 41. [DEMO]
  42. 42. ちょっとだけお知らせ
  43. 43. Lobi Rec SDK
  44. 44. Lobi Rec SDKって? • スマホゲームに動画録画機能を付けられる! • 実況プレイ動画も撮れる! 実況があるとゲームは格段に面白くなる!
  45. 45. 証拠の動画
  46. 46. SceneKitでも動いたよ! でも公式ではなくあくまで個人で入れてみただけですが
  47. 47. [DEMO]
  48. 48. ご静聴ありがとうございました

×