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

2013年12月03日

11月の結果

11月の結果です。

流れ作業 338 DL
アスレチックボール 5,465 DL
ベビーボールズ 135 DL
3D野球盤DX 12,682 DL
進撃の茨城 228 DL でした。

広告アプリ4本の金額合計は約22万円でした。
順調に右肩下がりです。

現在新作アプリがin reviewに入っていますので早けりゃ明日までには公開されると思います。
このアプリも売上には貢献しなさそうです。

3D野球盤DXのアップデート版ももうすぐ申請します。
あまりテストしてなかったので、スコアボードのド派手なバグがあったりしたのですが、
その辺も直っているものです。ただしボールの怪しい挙動は直ってませんw
また要望の多かった通信対戦機能を実装しています。まさにバグの温床ですなww
posted by iworks2013 at 00:08| Comment(0) | App