はじめに
Graffity株式会社でARアプリを開発しているむーつんです。
普段はARを使った対戦ゲーム「ペチャバト」のAndroid版の開発を担当しています(春頃リリース予定
ペチャバト(iOS版)では対戦相手の位置情報や攻撃の情報をMultiPeerConnectivity*1を利用してローカル通信を行っています。
しかし、Android版を開発するとなるとiOSの機能であるMultiPeerConnectivityは使えませんし、プラットフォームが違っても同じインターフェースで実装できるプロトコルを採用する必要あります。
そこで以下の3つの方法を検討し、最終的にBLEを採用しましたのでその実装内容まで解説できたらと思っています。
Photon Cloud
- 言わずもしれたマルチプレイヤープラットフォーム。
- プロトタイピングでもさんざん使ってきたので知見もたくさんあった。
- 何より、下回りの処理をほとんど考えることなくリアルタイム通信ができるので工数が大幅に削減できる
はじめはPhoton Cloudで実装し工数を減らそうと考えていたが、インターネットを使わずにローカル通信がしたい点とすでにリリースされているiOSのプロジェクトとインターフェースを合わせるのが困難そう(iOS開発側の負担が大きかった)なので一旦保留となりました。
※クロスプラットフォームでiOS/Android両方ともUnityで開発する場合良いかもしれません
Google Nearby
NearbyはGoogleにより公開されている近接通信のためのライブラリでWi-FiやBLE、高周波の音声などを使って端末のIPを特定し、インターネットを介した通信を実現しています。「Nearby Connections」「Nearby Messages」「Fast Pair」の3つの機能があります。
###「Nearby Connections」
- インターネットを使わずに他のデバイスと近接通信ができる
- Androidのみ対応。
- マルチプレイヤーゲーム、リソース配信、チームコラボレーション、コンテンツの共有などの利用を想定されている。
今回はクロスプラットフォームを想定していたのでこれは不適当でした。
(Androidだけの通信でよい場合はUnityのSDKも使いやすいので良いかもしれません)
###「Nearby Messages」
- クロスプラットフォーム
- 近くにある端末間で小さなメッセージを送受信することができる
- インターネット接続が必須。
メンテナンスされていない。。
クロスプラットフォームは対応しているが、いざ実装してみるとBLEなどの近距離通信を使用しているのはIPの共有などだけであとはインターネットを通じて通信しているようでした。
また、メッセージが届くまでのラグがあったためリアルタイム通信が必要なペチャバトには不適当でした。
(Unityのプラグインが存在しなかったので自分でブリッジコードを書かないといけなかったことも要因の一つです)
「Fast Pair」
ヘッドホンなどのBluetoothを使いたいハードウェア開発者向けのワンタップペアリングの機能を実装するためのインターフェースを提供
これはあんまり関係ないですね・・・笑
Bluetooth Low Energy(BLE)
Bluetooth の一部で、バージョン 4.0 から追加になった低消費電力の通信モード。(Wikipediaより引用)
iOS/Android双方が対応していること、MultipeerConnectivityである程度実績があったことから今回はBLEを採用することになりました。
次回は実際にBLEでクロスプラットフォームにローカル通信ゲームを作る際の実装方法や問題の対処などをまとめたいと思います。
関連記事
【Android】BLE通信ざっくりまとめ
https://qiita.com/HideMatsu/items/6a6758eca86500881126