👾 | try! Swift Tokyo 2018 Day1-14

インディーズゲームの開発者の多くは、開発にSwiftを使ったことがありません。Swiftでモバイルゲームを作ってみましょう。このトークでは、Swiftでカジュアルゲームを作る方法を紹介します。SpriteKitやゲームのアルゴリズム、ツールについてもお話します。インディーズゲームの開発者になりましょう!

👾

f:id:niwatako:20180301170435j:plain

f:id:niwatako:20180301170619j:plain

iOS開発基盤エンジニア

f:id:niwatako:20180301170634j:plain

f:id:niwatako:20180301170637j:plain

Fastlane開発もしています

でも世を忍ぶ仮の姿で、インディーズゲームを作っています

f:id:niwatako:20180301170651j:plain

去年AppleWatchでマリオをやったり、ハッカソンでタッチバーアプリを作ったりしました

f:id:niwatako:20180301170720j:plain

興味を持ったら本を手にとって見て下さい

f:id:niwatako:20180301170730j:plain

Swiftでゲームを作ってみましょう

f:id:niwatako:20180301170755j:plain

f:id:niwatako:20180301170805j:plain

Xcodeはゲーム開発ツールだったのです

f:id:niwatako:20180301170828j:plain

Xcodeでワールドマップを作れます

f:id:niwatako:20180301170838j:plain

学生時代からGlobal Game Jamに参加しています

f:id:niwatako:20180301170901j:plain

48時間でゲームを開発します。開発環境は自由ですが、ことしはSwiftでやりました。

f:id:niwatako:20180301170934j:plain

ボディービルダーが降ってくるので落ちないように組み合わせて下さい

f:id:niwatako:20180301171013j:plain

PureSwfitで作っています

Game開発をしてみましょう。

f:id:niwatako:20180301171032j:plain

f:id:niwatako:20180301171037j:plain

GameKitは純正フレームワークで2Dゲームを開発できます。

f:id:niwatako:20180301171055j:plain

クロスプラットフォームゲームを選択するとターゲットを作ってくれます

f:id:niwatako:20180301171114j:plain

ゲームはシーン(ゲーム画面)とノード(シーンに描画されるすべてのもの)

f:id:niwatako:20180301171119j:plain

f:id:niwatako:20180301171141j:plain

UIViewControllerとUIViewのようなものかもしれません

f:id:niwatako:20180301171156j:plain

f:id:niwatako:20180301171203j:plain

様々なノードがあります。シーンのデザインは

コードでもシーンエディタでも作成できます。

f:id:niwatako:20180301171224j:plain

f:id:niwatako:20180301171239j:plain

Rikoを配置しました

テクスチャはImageAssetからアクセスできます。

IBOutletに相当するもんはありませんが、このようにアクセスできます

f:id:niwatako:20180301171312j:plain

毎フレームアクセスされるUpdateがあります

f:id:niwatako:20180301171326j:plain

UITouchを継承しているのでタッチを取得できます

f:id:niwatako:20180301171343j:plain

座標をとって、タップした場所にRikoがいたら爆発させましょう

f:id:niwatako:20180301171411j:plain

f:id:niwatako:20180301171442j:plain

f:id:niwatako:20180301171445j:plain

基本的な機能は説明したとおりです

3D用のSceneKit、ReplayKit、Gamekit。。。などがあります。

cocos-2dなどもありますがメンテナンスが止まっているしObjeCなのでオススメできません

f:id:niwatako:20180301171526j:plain

使い方は似ています

f:id:niwatako:20180301171557j:plain

アプリをつくれたらゲームも作れます

f:id:niwatako:20180301171616j:plain

よくあるパターンをみていきます

f:id:niwatako:20180301171637j:plain

GameplayKitによくあるやつが入っています。

サンプルコードもあって、かなり作り込まれています

f:id:niwatako:20180301171716j:plain

Swift4でビルドできないので、現在の環境でビルドできるパッチを置いておきました

f:id:niwatako:20180301171735j:plain

ゲームのデザインパターンについて学べるパーツを見ていきます。

f:id:niwatako:20180301171756j:plain

まずStateMachineです

f:id:niwatako:20180301171822j:plain

ゲームスタートや開始、追いかける、逃げるなどがあるかもしれません。 ゲーム中に登場する多くのものは状態遷移を持っています。

これらを実現するのがGKStateです。

f:id:niwatako:20180301171857j:plain

繊維前、遷移後、updateを登録します。 シンプルですが協力です。

コンポーネント指向

GKComponentSystem

これらのロボットはグラフィックや当たり判定の特徴を持つ一方で、特定ロボットが持つ特徴(プレイヤーのロボットは操作できるべきなど)もあります

多重継承的な仕組みを実現するのがコンポーネント指向です。

機能をコンポーネント単位で実装し、それらコンポーネントを保持するのがエンティティです。

このデザインパターンで再利用性が高まります。

機能を細分化することで依存関係を排しつつ再利用性が高まります。

コンポーネント指向のアーキテクチャはゲームでしばしば用いられます。

他にもいくつか便利なアルゴリズム(経路探索)などが用意されています。

障害物を避けるような動きを簡単に作ることができます

github.com

例えば攻撃を受けた時にダメージを反映したい時、ゲージをBehabiorRelayにして勝手に反映させられるようになります。

f:id:niwatako:20180301172340j:plain

よかったらスターを付けて下さい

f:id:niwatako:20180301172439j:plain

もちろんWatch上でも動きます。

f:id:niwatako:20180301172442j:plain

f:id:niwatako:20180301172457j:plain

なぜゲームを開発しないのでしょうか。 それは移植性といえるかもしれません。

f:id:niwatako:20180301172527j:plain

SpriteKitはWatch向けに最適ということがわかります

f:id:niwatako:20180301172548j:plain

f:id:niwatako:20180301172606j:plain

しかしSwiftで様々なプラットフォームにゲームを開発できるようにする試みはいくつか見つかりました

cocos-2D開発者がやっている

f:id:niwatako:20180301172632j:plain

しかしここ半年開発が止まっています

f:id:niwatako:20180301172702j:plain

今後の発展に期待しましょう

f:id:niwatako:20180301172715j:plain

この発表がみなさんが神ゲーを作り出す一助となれば幸いです。 ご清聴ありがとうございました

[広告]面白かったら、ためになったら

  • はてなブックマークSwift タグをつけてブックマーク!
  • 「インターネットで生活を楽しく豊かにしたい」仲間を募集しています
  • Bitcoin: 3KGqXtR1ZaGVdkvcw8CCNrkDxDhdbZBYHL