2013年12月20日

UnityCoasterの登場です

UC.jpg
ダウンロードページ

常々思っていましたが、Oculusを初体験させるときに使用されるソフトは何なのかと考えた場合、鉄板が「Rift Coaster」というUDKで制作されたソフトでした。
これは木製のローラーコースターに乗ってお城の周辺を駆け巡るソフトですが、わかりやすいと言うこともあって非常にウケがいいようです。世界的に広まっています。YoutubeのOculus動画にも登場回数が多いと思います。

しかしこのソフトはWindows専用と言うこともあり、Macで使いたければBootCamp必須ということになってしまいます。
この状況を打破したいと考えて開発されたのが、このUnityCoasterです。

企画発案から約5日で完成しました。この短期間で開発出来たのはAssetStoreの力によるものです。モデリングはほとんどしていません。
自作したのはコースターの動きやサウンドが主です。モデリングは星のチューブと看板ぐらいでしょうか。
苦労したのがやはりコースターのモーションです。初めはiTweenを使ってみたのですが、パスにそって動かすことは出来ても速度の調整が効かないという致命的な弱点があり、廃案となりましたw
作成したiTween用のパスをそのまま流用してさらに動きをスムーズにしつつ速度を制御するという難題をどのようにクリアするか?

実装としては以下の通りです。
・複数のVector3を使用してスプラインで2点間を補完して新たなVector3郡を作成。これで240のパスが1500のパスに拡張される。
・速度が一定になるように、オブジェクトをLookAtで目的地に向かわせ、Translateを使って移動。
・スムーズな方向転換になるように、Leapを使用して向きを転換する。(2点間の位置をパーセンテージで取得してLeapに投げる)

まだ問題はありますが、これでひとまず動きました。
今後は新たな仕掛けを追加したり、動きをさらにスムーズに出来ればと考えています。

posted by iworks2013 at 00:01| Comment(1) | oculus

2013年12月10日

アプリ第6弾「沈没作戦ゲーム」リリース

screen568x568.jpeg
すっかりブログに書くのを忘れていましたが、iOSアプリ第6弾の「沈没作戦ゲーム」を先週リリースしました。
これは1976年頃に今は亡きタカトクトイスが発売していた対戦型ボードゲームを無理やりアプリに移植したものです。
つまりコンセプトとしては、アスレチックボールや野球盤と同じでアナログゲームをアプリで再現すると言う共通のものです。
そろそろネタ的には打ち止め感がありますww

私は個人的に沈没作戦ゲームを持っていた訳ではなく、テレビなどで見て「面白そうだなー、欲しいなー」と思った程度でした。ルールもよくわかっていませんでした。ちなみに生き残り作戦ゲームはありましたw

この動画は「沈没ゲーム」です。作戦がついてません。作戦が付いているものは大型で、途中にピットフォールリングという落とし穴があります。本作はこちらを再現しました。作っている途中であまりに面倒で「作戦」を選んだことを後悔しましたw

技術的には特に大したことはしていないのですが、この複雑極まるリングの形状を再現するために1リングあたり60個近いBOXColliderを搭載しています。そのリングが9個あります。さらにスタート時のボールが24個ありますから膨大な計算量になっています。ですのでiPhone4レベルではまともに動作させるのは不可能ですw
また、リングの隙間が一直線に並んだ場合にボールがどんどん詰まっていくので、回転時の当たり判定がおかしな状態になったりします。場合によっては吹っ飛んでしまってLOSTしたり、一気にゴールしたりすることもあります。これはバグに近いのですが、面白いので対策してませんw実機でも似たような現象は起こるのではないかと考えています。
現在把握しているバグとしては、回転が永久に止まらなくなるというものがあります。回転ストップの判定がかなり複雑なのでちょっとあやしい動きになっているのが原因です。アップデートで1回転したら無条件にストップするような処理を入れる計画です。
さてこのアプリのDL数ですが、現在のところ進撃の茨城を抜いて最下位街道を爆進中ですww
さすがにマイナーすぎたかもしれませんなwww

現在、3D野球盤の通信対戦を実装中ですが、通信自体はわりとカンタンにできたのですがお互いの同期が死ぬほどめんどいwこのゲームはタイミング命なので同期は実は非常に重要です。PtoP対戦なのでサーバーが無いのですが、常にバッティングを行うほうがサーバーになるような処理を行っています。もうすぐ申請できそうなので、クリスマスには間に合いそうです。
posted by iworks2013 at 03:03| Comment(1) | App

2013年12月05日

iOS GameKit Local Multiplayerの使い方

今回3D野球盤DXの通信対戦を実装するにあたり、AssetStoreのprime[31]のiOS GameKit Local Multiplayerを購入しました。
評価も何も無いので若干不安でしたが、基本的な使い方がわかったので備忘録としてこのエントリを残しておきます。
とにかくネット上にはUnityでのBluetooth通信を扱った情報がなかったので役に立てばと思います。
comm0.png

ファイル構成は以下の通りです。
comm1.png

使用するのはGameKitManager.csとGameKitBinding.csです。
これはPluginsに入っているので、特に宣言することなく呼び出せます。

[何が出来るの?]
WiFiまたはBlueToothを使った通信プレイが可能になります。1対多の接続にも対応しています。
GameCenter経由の対戦にも対応しているようです。またボイスチャットの機能もあります。
送受信できるデータは、String型、またはbyte[]型のようです。Float等のやりとりをする場合は一度Stringに変換して送信する方法になりそうです。

大まかな流れとしては、
(1)Start()等の最初に動くスクリプト内で、割り込みイベント(接続、切断等)を定義する。
(2)任意の地点でGameKitBinding.showPeerPickerを使ってピアピッカーを表示、接続を行う。
(3)Update()等のループ内で送信イベントを発生させる。
(4)任意のメソッドを用意してデータを受信する。
(5)必要がなくなったら切断する。


こんな感じです。


[実装方法]
<割り込みイベント>
例えば接続が成立した時に特定のメソッドを呼び出したい場合

    GameKitManager.peerConnectedEvent += onPeerConnected;

これで接続が完了した時にonPeerConnected()が呼び出されます。
なお、アプリケーション終了時などには、

    GameKitManager.peerConnectedEvent -= onPeerConnected;

以上のようにメソッドを開放します。


<ピアピッカーの表示>
ピアピッカーとは接続相手を表示させ、どの端末と接続させるかどうかを選択するダイアログです。
iOS6とiOS7ではかなり表示が違います(どう見てもiOS6の方が見やすいw)

    GameKitBinding.showPeerPicker( true );

trueとfalseですが、trueだとWiFiとBluetoothを表示し、falseだとBluetoothの接続を即時で行います。
呼び出しの方法は以上の1行を書くだけです。カンタンです。


<現在が接続状態か否かを判定する方法>
通信プレイで重要となるオンライン状態を調べる方法ですが、以下のとおりです。

    GameKitManager.isConnected()

これでbool値が返ってきます。もちろん接続時がtrueです。


<データ送信>
データ送信方法は以下のとおりです。

    GameKitBinding.sendData( "相手のGameObjectのname", "相手のGameObject内のメソッド名", string型データ, 必着オプション(bool));

相手のGameObjectのnameは、どのゲームオブジェクトに対してデータを送信するかです。
相手のGameObject内のメソッド名は送信した相手のゲームオブジェクトにアタッチされているスクリプト内のメソッド名です。
この処理が到達するとそのメソッドが割り込みで処理されます。
必着オプションの効果は良く分からないのですが、投げっぱなしか確認できるまで停止するかどうかみたいなオプションだと思います(適当)

<データの受信>
データ受信はデータ送信の項目にあるように、予め受信用のメソッドを用意しておくだけとなります。例えば

    void DataReceive(string rdata){

のような形です。

<切断>
切断というよりは確立している接続セッションを破棄するイメージとなります。

    GameKitBinding.invalidateSession();

基本これだけの処理がわかっていればBluetoothの通信はできると思います。
GameCenterを使った通信プレイはまだ調べてないのでよくわかりませんw
posted by iworks2013 at 01:01| Comment(0) | Unity