SNOOZE LOG

iOS中心のプログラミング関連技術メモ

ARKit使って、社内ハッカソンで「技術賞」を頂く

2017年末の社内ハッカソンのチームで「技術賞」をいただきました! (ちなみに私はフリーランスで、常駐させて頂いています。) ハッカソンでは、iOSアプリのクライアントを担当しました。

RunAndPon

チームのテーマは「スポーツ」でした。 社内ハッカソン実施のアナウンスから、2ヶ月ほど週一でミーティングを行ってました。

最初は 『GPSを使ってエアホッケーのようなものを作れないかな。実際に走った距離でバーを動かす。』 というアイデアが原型でした。

ARKitで移動距離を取る

GPSの精度ではきっと目的を達するにはイマイチだろうと、 iOS11のARKitで物差しを実現していることに気づいて、つまり、

ある点からある点までの距離がだせるってことだよね ー> 端末の移動距離をとることが出来る?

という感じでやってみたら、うまくハマったと思います。(単純にARKitが使いたかったのもあります。)

実際にARKitでは、アプリを起動した端末の位置をxyz座標の0地点(ARSessionのworldOrigin)として、 端末の移動距離を簡単に取ることができました。

こちらはサーバーのクライアントが動作する様子です。4人まで同時にプレイを行うことが出来ました。

サーバーサイド

サーバーサイドを担当していた方がアイデアの発起人&どんどん試作のコードをアップデートされていて中心となって チームメンバー全員のモチベーションをあげてくれたおかげで、私も動作するところまで持っていくことが出来たと思います。

クライアント

こちらはiOS11の端末録画機能で撮った、当日の発表の様子です。

iPhoneの画面を見て頂きたかったのですが、当日になんとか動作する状況に持っていけたためモニターに直接出力するための 用意がなく、ビデオカメラでiPhoneの画面を撮ってモニターに映すということをやっています。

ビデオカメラのケーブルが短かったため、あまり左右に動くことができなかったのですが、端末の動きに合わせて自機(手前のバー) が左右に動作します。

ボールの動きは、サーバーから送られたものをARKitの座標に置き換えて描画しています。 壁に当たった際の衝突判定など全てのボールの動きはサーバーですべて行なっているのですが、AR上のコートにピタッと座標変換を行なってマッピングすると跳ね返っているようにちゃんと見える、というのはやってみての気づきでした。 自機以外のバーは、クライアントPC(3台)がサーバーに接続されそれぞれ動かしています。

実際のソースコード

クライアントサイドのみになりますが、GitHubソースコードをほぼハッカソンの状況のまま公開してみました。(サーバーなしの単体ではあまり動作しませんが)

github.com

・アプリの起動地点を元にSceneKitのオブジェクトを置く。 ・端末の移動距離を取る。 ・移動した距離をオブジェクトに反映させる。 ・(あまり上手く書けていないですが)Starscream(iOSのWebSocket通信ライブラリ)での通信とオブジェクト(ボール、バー)への反映。 といった要素が含まれています。

感想 / 謝辞

ARKitはハッカソン映えがいいなーと思いました。 自分でも開発していてひとつの機能が出来るたびに、うお!と声を上げてしまい触っていて楽しく素晴らしいフレームワークだと思います。

今回の1日社内ハッカソン、基本的に各チームごとフリーテーマで、特に社内ツールに限るなどのハッカソンではなく、自由で、各チームの交流が主な目的で、非常に楽しかったです。

チームメンバー並びに、開催して頂いた運営チームに感謝したいと思います。 ありがとうございました。

ARKitについてはこちらを中心に学ばさせて頂きました。

peaks.cc

(原型はほとんどないですが)物差しのサンプルプロジェクトを下書きに使用させて頂きました。感謝・・・!