level0をご覧の皆さん、生存戦略ー! 
今週はお休みで寂しいですね。
有明に出奔してる方も多そうですが、構わずエントリです!

ところでこんなデモを作ってみました


iPhoneのBluetoothでコントロールするプロジェクションゲーム from BMCL on Vimeo.


これはなに?


これはサイネージ的に外の施設でプレイすることを想定したゲームのプロトタイプです。画面内にある日記帳を、自機であるペンギンに取りに行かせます。

えっ? どこかで見たことのある設定だって?
それはきっと、運命による偶然です。

ペンギンを移動させるためには、りんごを使います。
りんごには果たしてどういう意味があるのか・・

自分の端末で楽しむシングルモードと、サイネージを利用して楽しむバトルモードがあります。
バトルモードの時は、IPhoneの操作で壁面のペンギンを操ります。


BlueToothなら誰でも参加できる(比較的)


さて、今回のプロトタイプで重要だったのは、通信方法です。
このように、店舗やイベントなどのリアルスペースで楽しむコンテンツは、ネットとの接点をいかに持つのか?twitterアカウントとかスマホアプリとどうつなげるの?ということがしばしば重要になってきます。
幸いなことに、iPhoneにはこういうリアルスペースで活躍しそうな近距離無線通信の機能があります。それがBlueTooth。
BlueToothのいいところは、Wifi接続やソケットサーバ抜きで簡単に同時通信できてしまうところ。
何も考えずにとりあえずスマホにアクセスできてしまうわけです。
これを使えば解決!? と思いきや、、
当然ながら、iPhoneはBlueToothを使ってPC(今回はMac)と通信します。
Macの側にもBlueToothの通信機能はついているのですが、MacとiPhoneがBlueToothを使ってシリアル通信をする方法はどうやらないようなのです。もしかしたらあるのかな・・ 自分が探した限りではJailBreak以外は見つかりませんでした。

Mac側のBlueTooth通信方法

ではMacとiPhoneで通信することは難しいのか?
そんなことはありません。もともと、iPhone同士やiPad同士だとBlueTooth通信は簡単にできるのです。
そう、通信の仲介役に1体、iPhoneなりiPadなりを用意してあげればいいのです。 仲介役とMac間は、Wifiの環境さえあればOSCなり何なりでつなげちゃいますしね。
gainenzu.png

まとめと展望

さて、結果は冒頭の動画のとおり、iPhoneのGameKitフレームワークを使うことで、多人数プレイ可能な通信が実現できました。
また、ちょっと心配だったWifi通信とBlueTooth通信の並行も特に問題なく、遅延を感じることのない操作が実現できています。
これで、iPhoneさえ持ってればだれでも参加可能で、電子の世界に爪痕を残せるサイネージコンテンツが作れますね。夢が広がります。
ただ1点気になる点としては、通信を実現するために独自のアプリが必須であるということ。
サイネージを触るだけためにアプリをインストールする、ということはなかなか考えにくいので、
単体で遊べるアプリがあった上で楽しめるリアルコンテンツ、という状態で初めて成立する感じになります。が、それはそれでなかなか敷居が高いですね・・

Bluetooth通信で参考になったサイト

さて、前置きが長くなりましたが、iPhoneとBlueToothで通信させる時に参考になったサイトです。

GKTank

http://developer.apple.com/library/ios/#samplecode/GKTank/Introduction/Intro.html
Appleから出ている、BlueTooth通信の対戦ゲームのサンプル。
ゲームの状態の情報をどうやりとりするか、というところがこのサンプルから知ることができます。 また、普通にBlueTooth通信で動くサンプルなので、これだけで基本的なところが全て実装されていることになります。

Game Kitプログラミングガイド(pdf注意)

http://developer.apple.com/jp/devcenter/ios/library/documentation/GameKit_Guide.pdf
GameCenterの機能など、GameKitを包括的に解説する資料です。
パートII ピアツーピア接続の章で、ピアやセッションの概念などのGameKitを使った BlueTooth通信における概念についての解説が詳しく書かれています。

Gamekitを使ったiPad - iPhone間のBluetooth通信 - Meltdown Countdown

http://d.hatena.ne.jp/marutanm/20100721/p1
iPhoneのBlueTooth通信で多人数参加にしたい場合、「GKPeerPickerController」を使ってしまうとこれができません。 GKTankは「GKPeerPickerController」を使っていて一対一通信のため、一体多通信の部分をアレンジする必要があります。 こちらのサイトに書いてある手順で実現できました。

すれ違い通信アプリ開発で得たBluetoothの知見まとめ - Over&Out その後

http://d.hatena.ne.jp/shu223/20110220/1298223410
弊社プログラマつっつんがアプリ「EncountMe」でBlueTooth通信を使った時の解説エントリです。 GameKitでのBlueTooth通信について色々と、特にGKPeerPickerControllerを使う場合/使わない場合についても解説されています。

openFrameworks

http://www.openframeworks.cc/download
さて、やっぱり今回もopenFrameworksです。 今回、仲介役のiPadにはBlueToothのサーバになってもらいつつ、MacとOSC通信をしています。 OSCの部分はoFのofxOSCアドオン、BlueTooth通信はGameKitを使っています。 Objective-Cのファイルとc++(oF)のファイルを混在してコンパイル可能だったため今回の仕組みが実現できたというわけです。

HTML5飯