FreelyApps

個人によるアプリ開発の日記です。アプリの収入だけで生活できるようになるのが目標です。UnityでAndroid向けのゲームアプリを作成しています。


    アプリ『トランプ・ジン・ラミー』を公開しました。
    Android/iOS https://goo.gl/PYKFYG

      このエントリーをはてなブックマークに追加 Clip to Evernote
    9/22に『トランプ・スピード』のiOS版をリリースしました。
    i_ts

    以前作ったAndroid版の移植になります。このアプリが最もダウンロードされていたアプリでiOSでも一番期待しているものです。

    公開から2週間ほど経ちまして、ダウンロード数を見てみるとやはり一番ダウンロードされていました。それでも500ほどなので、多くはありません。
    iOSの方はどうやったらダウンロードが増えるのだろうかといえば、おそらくランキングに載ることでしょう。 このハードルがGoogle Playに比べて高いと思います。AppStoreのカテゴリ別のランキングではトップ150までしか載りません。Google Playだと500までなので、相当違います。急上昇のありなしも影響するところでしょう。

    • カテゴリ:
      このエントリーをはてなブックマークに追加 Clip to Evernote
    10/6に「トランプ・17ポーカー」の公開ボタンを押しました。この記事を書いているときにはまだストアには上がっていない状況です。もうしばらくすればストアから配信されるでしょう。

    Android/iOSの同時リリースなのですが、iOSのリリースについて問題が少し起きました。トランプ・17ポーカーの審査は問題なく通ったのでアプリではなくiTunes Connectの問題です。

    手動で配信時期を決めるようにしていたのですが、審査が終わってあとはリリースボタンを押すだけというところでリリースボタンが押せなくなりました
    disable-release-button

    リリースボタンが押せないことをGoogleさんに聞いてもAppleのことだからか知らんぷり。そんなわけで今日は無理なのかもと思いつつ、適当にいじっていたら押せるようになりました。

    【解決方法】

    デベロッパによるリリース待ちという状態は、覚悟ができたらリリースボタンを押してくれという意味です。しかしながら押せないことが起こりました。
    この状態では審査が通った後なので、ストアの情報はほぼ変更できません。変更できないところをいじるとエラーと警告されます。

    以下のバージョンのリリースという項目が変更可能でした。手動か自動でリリースです。手動でリリースが選択されていたのですが、これを自動にして保存すると、”このバージョンをリリース”ボタンが押せるようになりました。自動にしたものを手動に再び戻しても、リリースボタンが押せるようになっていたので、これで問題なくなりました。
    howto-release

    ”このバージョンをリリース”ボタンが押せないときは、バージョンのリリースという項目を変更し、保存するとリリースボタンが押せるようになるのかもしれません。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    「トランプ・ポーカー ~5カードドロー~」と「トランプ・アメリカンページワン」のアップデートを先日行いました。ゲームの途中にポーズ画面があるのですが、そこからゲームをやめると点数がおかしくなるバグを修正しました。

    バグの原因は単純で以前の点数をリセットしていないためでした。結果を表示するシーンからメニューシーンに戻るところでのみリセットをするように作っていたのでそのようになりました。メニューシーンに入ったときにリセット処理を行うことで問題はなくなりました。

    元々「トランプ・アメリカンページワン」の点数処理を流用してこれらのアプリは作られています。そのため作成中のアプリで同様の問題が見つかり、ついでに以前の2つのアプリも修正することになりました。汎用的な処理や似たアプリの処理は積極的に使いまわしているのですが、その欠点が現れたというところです。それでも修正はできたのだし、まあ良しとします。
    もっとテストすれば・・・ということは考えつく単純で効果ある方法です。しかし、完全なものを目指すことは良いにしてもどこかで終わりにしなければなりません。

    iOSでのアップデートを初めて経験したというのが大きいです。アップデートを行うということは、続けていれば必然です。審査があるので、時間がかかるということがわかりました。つまり、緊急で対応というのはできないということです。
    バージョンは1.0から1.1にあがりました。
    tp5dtap

    iOS版の「ゆにてく」をリリースするため、現在審査を受けているところです。ただ、リジェクトされてしまったので、その対応中の状態です。「UnityChanって他のところのものだけど、それって使ってもいいの?」というところが問題です。なかなか時間がかかりそうな感じです。
    何回も落とされると慣れます。はじめはショックでしたが、今はこれで通るかなと期待しつつ出しています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    List<T>クラスは非常に便利なクラスです。配列のように大きさが決まっていないので、要素が増えたり減ったりするものを扱うのに適しています。
    トランプゲームを作るときにカード一つ一つにint型のIDを割り当てています。一度に複数のカードを出すといったときにList<int>で複数のカードを表すと扱いが簡単です。リストの分だけ処理をforeachで行えば良いからです。

    Listを使うときに失敗したことをメモしておきます。たまに「あれ、どうなってるんだっけ?」となるもので、先日テストコードを書きました。

    1.Listを引数に渡したとき、内部で要素を足したり消したりすると影響が残る
    このスクリプトをUnityで適当なゲームオブジェクトにアタッチしてみた結果は次のようになりました。
    printListTest
    見てもらえば大体わかると思いますが、ListAddやListRemoveに渡したリストの内容が変わります。List<T>はクラスなので、参照型ということですね。参照型を引数に渡したときの挙動は気を付けないと、バグになりやすいです。

    2.リストのループ内でリストを変更してはいけない
    このスクリプトをUnityで適当なゲームオブジェクトにアタッチしてみた結果は次のようになりました。
    printListTest2
    この例は実行するとエラーを起こしますが、コンパイルは通ります。これはforeachループ内でリストに変更をしていることが問題です。(list.Remove(2)のところです。)
    実行すればわかるバグですが、この例よりも複雑なことをする場合には意外と気づきにくいバグになります。
    リストの要素を一つずつ検査していって、ある条件になっているものを除きたいというときに同じループ内で決してしまうということをやってしまうとエラーになります。RemoveAllメソッドを使うか、いったん削除対象を別のリストに入れてからそのリストのループ内で元のリストの要素を消していくことになります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ナポレオンというトランプゲームができるアプリ『トランプ・ナポレオン』にはオンラインでの対戦機能があります。当初からあったのではなくバージョン2.0のときに入れた機能です。Unity Multiplayerが導入されオンラインマルチプレイが簡単になったということで対応をしました。

    Unity Multiplayerによりマッチングの対応や同期の実装が非常に簡単になりました。コードを書かなくても位置の同期をするといったことも可能ですごく便利です。
    通信を用いた対戦を実装するのはいくらAPIの呼び出しが楽になっても簡単ではありません。それは切断時の対応やエラーの問題です。これをどう対応するかはアプリによるので大変なのです。オンラインゲームはどう作れば良いのか調べたり、Unityのドキュメント(作ったときは英語だった)を読んだりして試行錯誤があったので40時間近くはかかったと思います。一度経験すればそれ以降は楽になると思います。
    あとはテストが大変です。Unityのプロジェクトをコピーして、複数のプロジェクトを同時に起動すると1つのPCで通信できます。これはウィンドウが多くなるので見づらいですが、Unity Editorでログが見れたり、インスペクターが使えるのでデバッグに向いています。テストを実機で行うとできることはわかっているのですが、 テンションがあがります。独立した端末同士での対戦ができると、世界中でも対戦できることになるというのが実感できて、ちょっと夢が広がります。

    トランプ・ナポレオンに通信対戦機能が完成したときはよくできたと思っていましたが、実際にはあまり遊ばれないようです。2~5人のプレイヤーが集まれば遊べますが、ナポレオンは5人で遊ぶゲームなので足らないとAIと対戦することになります。

    現在のアクティブユーザーがメニューで通常のAI戦とオンライン対戦のどちらのボタンをクリックしているかの統計を見ると20~30倍程度の差があります。更にマッチングが完了し対戦に行くのは、もちろんメニューを選んだよりもかなり少ないです。
    tn-menu-compare-graph

    ただユーザーの数で比べてみると、差は10倍程度になります。
    それなりの数のユーザーが選んでいるにも関わらず通信対戦のメニューをクリックした総数は少ないように思います。通信対戦を選んでみるユーザーはいるが、マッチングせずにそれ以降選ばなくなっているのではないかと考えられます。

    すぐにマッチングするには相当なユーザーが必要です。2人のユーザーがマッチングには必要で、10秒は待てるとしましょう。極端な例として、マッチングが最もしにくくなるには全てのユーザーの待っている時間帯が重ならないことを考えます。1日は86400秒なので、10秒ずつユーザーがずれていれば8640人のユーザーが重ならずに配置できます。8641人目が来れば、それ以前にいるユーザーにぶつかります。全員がマッチングするには8640人に対し、相手が必要で2倍。つまり17280人がいれば、10秒待てば必ずマッチングするでしょう。

    通信対戦があるというのは利点です。これが活かせるためには多くのユーザーがいるのが前提です。アピールするために入れるというのはあるかもしれませんが、労力に見合うのか検討する必要があると思います。
    アップデートでいれるのは相当難しいですが、遊ぶ人数が増えたときに対応するというのが一番良いと考えています。(10万DLとか行ったら、喜んで入れます。)

    このページのトップヘ