63
Swiftでゲームを作ってみた2日間」 って話なんですけどね株式会社あくしゅ 代表取締役 山崎泰宏

Swift Code in Swift - 2日間でゲームを作ってみた

Embed Size (px)

DESCRIPTION

Swiftを使って2日間でゲームを作る話

Citation preview

Page 1: Swift Code in Swift - 2日間でゲームを作ってみた

「Swiftでゲームを作ってみた2日間」  って話なんですけどね…

株式会社あくしゅ  代表取締役 山崎泰宏

Page 2: Swift Code in Swift - 2日間でゲームを作ってみた

自己紹介

!   山崎泰宏  

!   1977年北海道生まれ  

!   株式会社あくしゅ 代表取締役  !   2006年登記、現在新宿南口から徒歩10分くらいのところ  !   従業員13名(2014年6月現在)  

 

Page 3: Swift Code in Swift - 2日間でゲームを作ってみた

基本のドキュメンテーションは英語 会話は必要に応じて英語

Glocalized  Company

Page 4: Swift Code in Swift - 2日間でゲームを作ってみた

職場の風景

出社時間決まってないから  朝は誰もいません

Page 5: Swift Code in Swift - 2日間でゲームを作ってみた

開発環境はこんな感じ

Page 6: Swift Code in Swift - 2日間でゲームを作ってみた

飲み会の時間には  みんな集まります

Page 7: Swift Code in Swift - 2日間でゲームを作ってみた

ゲームの時間も  出社してくれます

Page 8: Swift Code in Swift - 2日間でゲームを作ってみた

今日はSwiftでゲームを作ってみた  って話しますけどね…

Page 9: Swift Code in Swift - 2日間でゲームを作ってみた

iOS  と全く関係ない  ソフトウェア技術会社です

Page 10: Swift Code in Swift - 2日間でゲームを作ってみた

クラウド基盤ソフトウェア  Wakame-­‐vdc

Page 11: Swift Code in Swift - 2日間でゲームを作ってみた

仮想ネットワーク技術

OpenFlow  1.3を駆使し  物理ネットワークの上で  仮想ネットワークを  自由自在にオーバレイするもの

Page 12: Swift Code in Swift - 2日間でゲームを作ってみた

データセンターの仮想化を  目指している会社

Page 13: Swift Code in Swift - 2日間でゲームを作ってみた

• Open  Source  License  (LGPL3)  • Ruby  

Page 14: Swift Code in Swift - 2日間でゲームを作ってみた

山崎の講演や執筆 !   NII  (国際情報学研究所)にてクラウド関連講義を担当  

今年度からAIITでも非常勤講師になる予定  

!   日経コンピュータ(2012/1~2012/3  計7回連載)  「今さら聞けないクラウドコンピューティング」  

!   その他クラウド関連の記事を  多数執筆  

ぜひご購入下さい!

Page 15: Swift Code in Swift - 2日間でゲームを作ってみた

とは言え、個人的には  ゲームとか作るのは好き(だった)

Page 16: Swift Code in Swift - 2日間でゲームを作ってみた

大学時代 (16年前) 1年生の時から、  「ネットワーク」+「3次元」の技術に  没頭していた

1998年頃    1年目で作って  学内に公開した  通信対戦ゲーム

Page 17: Swift Code in Swift - 2日間でゲームを作ってみた

OpenGLに手を出す

暇人なのでゲームエンジンとか作ってた。

地味に表現力を上げて行きました

形状 材質

関節 最適化

Page 18: Swift Code in Swift - 2日間でゲームを作ってみた

当時はまだプレステ1の時代

Page 19: Swift Code in Swift - 2日間でゲームを作ってみた

Virtual  Sound  Horror  House  (1999)

光と影の表現を加えて、やっとここまで来た…

Page 20: Swift Code in Swift - 2日間でゲームを作ってみた

しかも、Virtual  Realityっぽく (1)  HMDでぐるぐる見回せる

(3)障害物に当たると  Hapticsな感じがする

(2)  3Dサウンドが鳴る

Page 21: Swift Code in Swift - 2日間でゲームを作ってみた

現実空間と融合した方が面白そう

Page 22: Swift Code in Swift - 2日間でゲームを作ってみた

実際の展示風景 (2001年)

Page 23: Swift Code in Swift - 2日間でゲームを作ってみた

物理的な動きで箱の中を表現

Page 24: Swift Code in Swift - 2日間でゲームを作ってみた

遊び心も忘れずに

Page 25: Swift Code in Swift - 2日間でゲームを作ってみた
Page 26: Swift Code in Swift - 2日間でゲームを作ってみた

某教授にそそのかされて

Page 27: Swift Code in Swift - 2日間でゲームを作ってみた

Swiftのセッション  やりませんか?

Page 28: Swift Code in Swift - 2日間でゲームを作ってみた

やりませんか?

Page 29: Swift Code in Swift - 2日間でゲームを作ってみた

ゲームプログラミングなんて12年ぶりくらいだよ!

Page 30: Swift Code in Swift - 2日間でゲームを作ってみた

残された学習時間は2日間  (延べだと12時間はある)

Page 31: Swift Code in Swift - 2日間でゲームを作ってみた

Swiftを真面目に勉強すると絶対にバテて死ぬ

Page 32: Swift Code in Swift - 2日間でゲームを作ってみた

生存戦略

Page 33: Swift Code in Swift - 2日間でゲームを作ってみた

とりあえずの方針

!   コードリーディングしまくれ!  !   Swiftの事なんて知らなくて良いんだ!  

気になるところを改造したり、  まずはコピペできるコードを探せ!  自分の知識辞書を作れ!  

!   読まないやつは大体書けない  ! FlappyBirdモドキのサンプルが素敵だった!  

!   悩むな!コードを書け!  !   書きたくなってから文法を調べろ!

Page 34: Swift Code in Swift - 2日間でゲームを作ってみた

FlappySwift

!   https://github.com/fullstackio/FlappySwift

Page 35: Swift Code in Swift - 2日間でゲームを作ってみた

FlappySwift !   単純なゲームではあるが、  

コードは思っていたより短かった  

! SpriteKitと言うゲームエンジンを使っている  !   Objective-­‐C時代から存在していたものらしい  !   シーングラフとイベントベースの制御エンジン  !   アクションを巧妙に定義して  

アニメーションやスクロールなどをさせている

!   物理演算の機能を使って衝突判定をしている  

Page 36: Swift Code in Swift - 2日間でゲームを作ってみた

スクロール

① ②

戻す 戻す

Page 37: Swift Code in Swift - 2日間でゲームを作ってみた

コードにするとこんな感じ 画像のロード

画像幅分だけ左へ移動

画像幅分だけ左へ瞬間移動

これらの動作を  永遠に繰り返す

2枚以上の画像を並べ  それぞれにこのアクションを適用する

Page 38: Swift Code in Swift - 2日間でゲームを作ってみた

衝突判定

各キャラクターごとにBounding  Areaを設定し、何と衝突検査するかを指定するだけ

衝突したらこの関数が呼ばれるので、  何と何が衝突したのかをif判定すれば良い

Page 39: Swift Code in Swift - 2日間でゲームを作ってみた

移動と操作 このバカな鳥は、重力の影響を受ける

画面のどこかをタッチした瞬間に、  重力方向の速度をキャンセルし、  上向きの力積を与えられ、空中でジャンプする

Page 40: Swift Code in Swift - 2日間でゲームを作ってみた

Swiftって言うか  SpriteKitの使い方が分かった感じ。  

とてもよく出来てる。

Page 41: Swift Code in Swift - 2日間でゲームを作ってみた

良く言えば、  少なくともSwift読むのは超簡単。  

理解できなかったのはSpriteKitの仕様の方。

Page 42: Swift Code in Swift - 2日間でゲームを作ってみた

何を作るか?

左右に走り続ける不憫な男がいるので  タップしてジャンプさせる。    空中に浮いているブロックの乗って  どんどん上に登っていくゲーム。

ブロックを下からすり抜けて登れるようにしたいので、物理演算に頼らず、自前

の衝突判定を入れた方が良さそう

Page 43: Swift Code in Swift - 2日間でゲームを作ってみた

さあ新規プロジェクトを  作るぞ!

Page 44: Swift Code in Swift - 2日間でゲームを作ってみた

ゲーム用のプロジェクトがあるので、迷わず選択

Page 45: Swift Code in Swift - 2日間でゲームを作ってみた

得意なOpenGLもある!  迷わず選択

※ESはよく知らないんですが

Page 46: Swift Code in Swift - 2日間でゲームを作ってみた

スケルトンコードが出た!

Page 47: Swift Code in Swift - 2日間でゲームを作ってみた

…ん? 全部コメントアウトされてるように見える…

Page 48: Swift Code in Swift - 2日間でゲームを作ってみた
Page 49: Swift Code in Swift - 2日間でゲームを作ってみた
Page 50: Swift Code in Swift - 2日間でゲームを作ってみた

\(T_T)/ 動いてないのかよ! Metalも同じだった

Page 51: Swift Code in Swift - 2日間でゲームを作ってみた

出鼻をくじかれ、  気分が乗らなくなってきた

Page 52: Swift Code in Swift - 2日間でゲームを作ってみた

ので、とりあえず絵を描こう!

Page 53: Swift Code in Swift - 2日間でゲームを作ってみた

取り込んで…

Page 54: Swift Code in Swift - 2日間でゲームを作ってみた

バラバラにして…

Page 55: Swift Code in Swift - 2日間でゲームを作ってみた

背景を抜いて…

Page 56: Swift Code in Swift - 2日間でゲームを作ってみた

大満足♥

Page 57: Swift Code in Swift - 2日間でゲームを作ってみた

FlappySwiftのコードをパクって  参考にして、走るアニメを作成

Page 58: Swift Code in Swift - 2日間でゲームを作ってみた

ここまでで1日終了。  とりあえず翌日に完成したデモをどうぞ

Page 59: Swift Code in Swift - 2日間でゲームを作ってみた

シーンの構成要素

!   Man  !   走る人  

!   Blocks  !   浮かんでいるブロック群  

!   Background  !   背景

Page 60: Swift Code in Swift - 2日間でゲームを作ってみた

前回処理時間との  差分を出す

基本的には、この差分時間を使って移動距離などを計算する

Page 61: Swift Code in Swift - 2日間でゲームを作ってみた

衝突判定

•  Manのx座標がブロックの範囲内で、  y座標がブロック上面より上にあるとき、  移動先がブロック上面より下になる場合に  衝突したと判定する  •  衝突したらy座標を固定し、  •  落下のベクトルを0にする  

実際はブロックの範囲を少し大きめに取って  判定している

Page 62: Swift Code in Swift - 2日間でゲームを作ってみた

感想とまとめ

!   とりあえずゲーム作るのは簡単だった  !   今回やらなかった物理演算も簡単で楽しそう  !   2日間でもそれなりのものが、すぐにできる  

!   言語仕様  !   Rubyに近い感じがする  !   ?  が割りと良さ気  

!   コンパイルとランタイムでのコードチェックの役割が  とても良い感じ  

!   ゲームライブラリが良く出来てる  

Page 63: Swift Code in Swift - 2日間でゲームを作ってみた