MightyCraft

Unityでビーコンを試してみました

東京本社のSです。

最近では「ゲーム以外でもUnityを使う」と言うケースが増えてきました。
受託案件でビーコンを使用したiPhone/Androidアプリを作っており、今回はUnityでiBeaconのレシーバーアプリを作っていこうと思います。

ビーコンとは何ぞやですが、ひとことで言うと「微弱電波を出す端末」です。

その微弱電波をスマホで検出して、位置情報(UUID)を取得します。

検出できる範囲は、数センチ/1m/10m とビーコンの仕様により選べるので、狭い範囲での位置情報が取得できます。

例えば数センチ範囲のビーコンは陳列商品の横においておき、スマホをビーコンに近づけると情報提供できますし、1mの範囲のビーコンは商品に近づいたという検出、10mのビーコンは店舗(店頭)に来店したという検出ができそうです。

今回は店頭に来店した来客に、パーソナライズ化したクーポンをその場で配布するという想定要件です。

ビーコンも多くの種類がありますが、Bluetoothの微弱電波を使うものが多いようです。

今回は、Appleが独自で規格を作ったiBeaconを使用します。

ビーコンは以下の2つの端末を用意しました。どちらもiBeacon規格に対応しています。

ビーコン

大きさがわからないかもしれませんが、500円硬貨を一回り大きくした程度です。
左側はボタン電池、右側は単4電池で駆動し、どちらも電池は1年以上持つとのことです。

左側は「BLEAD®-Ver.2」
http://www.houwa-js.co.jp/index.php/ja/products/blead

右側は「BVMCN1101AAB」
http://www.products.braveridge.com/beacon/bvmcn1101aa-b/

さて、ビーコンは用意できましたので、あとは次のものを準備します。

・Unity5
・BLE対応しているAndroid端末およびiOS7以上の端末
・iBeacon と言うアセット

Android端末はビーコンを感知できるようにBLE(BlueTooth Low Energy)に対応している BlueTooth Ver.4の端末を使用してください。最近の端末でしたらほとんどOKだと思いますが、少し古い端末だと BlueTooth が Ver.4ではない可能性もあります。
iOS端末はiOS7以上で、ビーコンが対応されるようになっています。

Unityではアセットを使用します。
いくつかビーコンのアセットを試してみましたが、安定しないものもあったので、以下の「iBeacon」という名前そのものの有料アセットを使用します。

アセット「iBeacon」$25
https://www.assetstore.unity3d.com/jp/#!/content/15260

「アプリを起動している間Beaconの情報を受信する」と言う要件ならこのアセットでOKです。バックグランドで常駐させたり、ビーコンに情報を送信したりとの場合は検証していないのでご注意下さい。

Unityを起動して実装を進めます。

■実装手順■

1.Assetsをインポートする

インポートすると以下の様になってると思います。

unity1

Scene/ibeaconreciverexample と言うシーンを選びましょう

2.UUIDをセットする

unity2

a. HierarchyからIBeaconReviverを選択します。
b. 監視するビーコンの数を設定します。
c. 監視対象のビーコンの名前を指定します。
d. 先に控えておいた端末のUUIDを指定します。
e. アプリ起動時に表示される位置情報の説明を記載します。
更新したら[Update Description] をクリックしましょう。

アプリを起動すると以下のように表示されます。

unity3

3.端末でアプリを起動する

それでは実際に AndroidとiPhoneのそれぞれの端末でアプリを起動させてみます。

端末の間にあるものがビーコンです。

unity4

端末の画面に表示されている項目についてですが、UUID / Major / Minor はビーコンに設定できるものです。ビーコンの設置時にあらかじめ設定します。
これらの情報を用いてどのビーコンを受信したか判定できるのですね。

[Range] ビーコンからの距離です。正確な距離は取れないので大まかな距離になります。
Immediate:Beacon →至近距離にあることを表します。
Near →近距離にあることを表します。
Far →遠距離にあることを表します。
Unknown →Beacon の距離が不明であることを表します。

[Rssi] 受信強度です。値が大きいほど受信状況が良い事をあらわしますが、Rangeがunknownの時は値が0になることがあります。

 

アセットを使用することで、Unityでも簡単にビーコンの情報を取得できることがわかると思います。

単純ですが「アプリを起動している間ビーコンの情報を受信する」事が出来れば、

・美術館の展示物を案内するアプリ
・脱出ゲームで手がかりの場所を検索できるヒントアプリ
・各店舗のクーポンを取得できるアプリ
・スタンプラリーのようなアプリ
・おかんにビーコンを持たせておき(洋服に貼り付けるとか)、部屋に近づいたら通知してくれるアプリ(笑)

などなど、やれることがグッと広がると思います。

ビーコンも個人で買えるような値段(数百円~数千円)ですし、気軽に実験もできそうですね。