Mercari AR Hackathon #0で優勝しました

優勝賞金50万円いただきました。ありがとうございます。たぶん椅子になります。

技術的なまとめは今週アドベントカレンダーにしようと思うので簡単に経緯と成果物だけまとめ。

作品の紹介

作品名:「AR一列つなげて消すパズル」

ゲームの説明

  • iPhoneを床にかざして平面を検出すると、床に前後2段組みの「一列つなげて消すパズル」が出現
  • ARKitを利用しているのでフィールドの周りを歩いて違う方向から観察可能
  • 画面をタップするとブロックが前後左右に移動
  • 前後2段を同時に揃えることでブロックが消える

立体「一列つなげて消すパズル」にした狙い

  • みんなが知ってるゲームなので、初めて見た人でも「プレイヤーは何を目指せばいいのか」「元のゲームから何が拡張されたのか」「プレイヤーの操作は何が出来る(出来るべき)なのか」が一瞬で通じる → 大幅な説明のカットができる
  • 手前にブロックが積まれるので裏に行かないとだんだん見えなくなる → 歩き回ることを誘発する

といった事を考えていました。

実際のデモプレイでも意図通りに働いてくれたように思います。

ちなみに「一列つなげて消すパズル」のサンプルコードはgithubに山ほど有ったので軽く改造すればすぐ作れそうという意図もありました。普通の「一列つなげて消すパズル」を前後2段にしただけの実装は3時間くらい。

テーマ1:人間から身体性を引き出す

ARをやっている人を周りから見ていると、プレイヤーは知らず知らずのうちに妙な体勢をしていることがあります。これは「ARが人間から体を動かす動作を引き出している」ように見えます。

というわけで「体を動かしたりウロウロ歩き回ったりすると有利になるゲーム」を作ることにしました。

テーマ2:会話を引き出す

ARの問題として、プレイヤー一人だけしかARの世界が見えないために、周りで見ている人が盛り上がりにかけるという点があります。

そこで観戦モードを作ることにしました。

設計はインターネットを介すかBLEか迷ったのですが、遅延の無さと一度BLEを限界まで使い切ってみたかったためBLEを選択。

シングルプレイ前提のゲームをマルチプレイに移行するのは噂には聞いていたもののなかなかしんどかったです。なんとなくReduxっぽい実装にすれば綺麗に作れるかなという設計がハマってどうにか完成。

大体この辺で元々のサンプルコードは跡形もなくなります。

仕事のお昼休みと就業後1,2時間づつくらい作業を進めて、これに大体2週間くらい。

BLEの参考書籍

こちらも社内のライブラリから。

テーマ3:遊びを引き出す

正確な例えかわかりませんが、ゲームを作るのではなくボールを作りたいと思いました。

ゲームは一つの遊びを規程するが、ボールは一つあるだけでさまざまな遊びを創造する…みたいな感じ。

そこで、最後に「観戦者も同様にブロックを操作できる仕様」を追加しました。普通に考えると、プレイヤー同士の操作が邪魔にしかならないのですが、そこに会話や協調の必要性が生まれると良いなという狙いになります。

すでにある程度はBLEを習得出来ていたので、観戦側のアクションを拾ってBLEを通じて送り返す実装は1日ほどでできました。これが前日の土曜日くらい。当日まで実際に複数人でテストプレイする機会は取れなかったのですが仕様的には5,6台で同時に遊んでも大丈夫なはずです。

マルチプレイを利用して対戦モードや得点に影響するゲームロジックを作ることも出来たのですが、あえて何も作らずにプレイヤーの手に委ねることにしました。

最後は「人間対ゲーム」ではなく「人間対人間」の間に面白さが生まれることを期待しています。

今後について

特に「操作系が直感的でない」という講評をいただいたので、この辺を改善していって最終的にはAppStoreでリリースしたいと思います。頑張るぞー。

Mercari AR Hackathonとは

  • Mercariさん主催のAR特化ハッカソン
  • 優勝賞金50万円、準優勝10万円、各審査員賞2万円
  • 日程は2017/12/17(日)の1Day Hackathon

今回は1Day Hackathonという形式のため事前の開発は有り(ただし当日も開発すること)というルールでした

  • 参加人数50名 19チーム

個人チームとして参加させていただきました。

他のチームは2〜4人のチームを組んで参加されている方が多かったように見えました。個人参加は4,5人くらいだったと思います。

  • 大会の様子

Meta2を持ち込んでいる方やクリスマスツリーを作っているチームなどなど、賞金付きハッカソンという事もあり、どのチームもめちゃめちゃ工夫して優勝を狙う非常に熱量の高い大会でした。

当日のツイート

お昼の金兵衛

ちょうど甘いものが欲しくなる時間に出てくるドーナツ

眠くなってきたころに提供されるコーヒー

運営の方のホスピタリティが非常に高い大会でした。

応募から当日まで

なぜ応募したのか

元々iOSはそれなりにやってたものの3DやARはほとんど使ったことが無かったので、自分が勉強するモチベーションにするために応募しました。

また、事前開発OKということで、コードを触るモチベーションを維持しやすい点も魅力でした。

事前学習

githubからARKitのサンプルを大量に落としてどんなことが出来るのか試してみたり、書籍はこの辺を会社のライブラリから借りて斜め読みをしていました。

テーマ決め

2週間ほど時間があったのでとりあえずARKitのサンプル実装などを触りながら、「ARならではで出来ることってなんだろう」といったことを考えていました。

また、3D技術もUnityも全然扱えないので割り切って「得意なSwiftで実装する」「立方体と球くらいでどうにかする」という2点は最初の方で決めていました。

テーマの方向性としては「AR内部の3D世界の魅力では勝てない」「ゲームデザインも素人」ということで「人間から面白さを引き出す」を主軸に考えることに。

もともとアナログゲームが好きでよく遊ぶのですが、アナログゲームは「紙に書かれたルール」を「人間」が適用することでデジタルゲームとは全く違う面白さを実現しています。これは「ルールにより人間から面白さが引き出されている」という考えは以前からあったので、今回はその辺もヒントに最終的なテーマを決めました。

ハッカソン当日

  • ひたすらバグfix
  • 説明をわかりやすくするためにHelp画面を制作
  • Resetボタンを追加(今までプロセスごと殺すしか無かった)
  • 数学的にあり得るブロックの組み合わせが全部入ってなかったので追加実装
  • 1行消す毎に新しいブロックが出てくるように裏側にレベル制を導入(ここまで到達する人あんまり居なかった)

と細かいユーザビリティを改善していたら一日終わりました。

デモ

デモの時間では審査員以外にも多くの参加者の方にも遊んでいただけました。

遊んでいる人によって自然と協力ができているところもあれば、全然意思疎通できずにゲームオーバーになる人達もいて大変興味深かったです。なんとなくですが、EQや仲の良さとも微妙に違う気がします。不思議。

表彰

表彰はカメラの用意してなかったのです。喜びの声がこちら。

おわりに

今回のハッカソンは、自分が得意だったり興味がある領域に近づけて開発できたことが大きかったと思います。

一例として

  • 得意な技術:Swift
  • 数学:ブロックの組み合わせ考えるの楽しい
  • アナログゲーム:人間から面白さを引き出すくだり
  • ちょっとだけ新しい技術をいれる:ARKit&BLE
  • 楽しんで作る:なにより大事。

といった感じです。

というわけで、技術的に学ぶところもあり、勿論当日も楽しいハッカソンでした。

最後に当日朝早くから準備していただいた運営の方々に感謝して終わりたいと思います。

ありがとうございました!

おまけ

個人参加なのにチーム名を求められるという

お疲れ様でした。