FreelyApps

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


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

      このエントリーをはてなブックマークに追加 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とか行ったら、喜んで入れます。)

      このエントリーをはてなブックマークに追加 Clip to Evernote
    開発中の『トランプ・17ポーカー』の紹介動画を作りました。今回はMacBookに付属していたiMovieという編集ソフトを使って動画を作りました。BGMが用意されていたので、入れてみました。FreelyAppsではBGMがあるのは初だと思います。(ノートだと動画作りは大変でした。)

    「17ポーカーとは何か?」という疑問があるでしょうから、お答えしておきます。
    Joker1枚と、A、K、Q、Jの各4枚のカードのみを使ったドローポーカーのことです。使うカードが合計17枚なので、17ポーカーです。
    5枚で手札ができるので、2人で対戦するゲームになります。5枚交換などをすればカードが足りず、交換に制限を受けます。
    カードが極端に少ないので、相手の手札を予想して勝負することになります。

    YouTubeとニコニコ動画にアップした紹介動画を載せておきます。内容は同じですので、お好きな方をどうぞ。
     
     

    実はこのゲーム ある漫画で勝負されています。ルールの発祥はこの漫画かもしれません。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    私は会社員をやっているので、開発時間を長く取ることは難しいことです。平日は定時に退社したとしても18時30分程度にはなるので、そのあと開発しようとすると相当短いです。

    まず最も重要なことなのですが、残業をしません。 これを守らないと開発時間は全くと言っていいほどとれません。なので残業はしないものと決め、終わらなかった仕事は明日に回します。
    適当に仕事を終わらして、とっとと帰ることが大事です。(まあ終わらなくても帰れば良いんです。)決まった時間働いていれば解雇なんてできませんから、大した問題はありません。

    定時に退社して、18時30分には帰ります。おなかがすいているので、夕食をとらなければいけません。自分で作ると時間がかかるので、外食に行きます。夕食後には開発があるので、あまりにも待つものや胃が持たれるものは避けます。 
    夕食に1時間くらいかかるので、落ち着いてくるのは19時30分~20時くらいになります。そこからゲームを作り始めると、2時間くらいが限界です。2時間でも22時くらいになりますから、金曜日でなければ明日の準備があります。
    掃除やお風呂、そして就寝。できれば0時には寝ていたいので、やはり22時くらいまでが限度です。ゲーム開発だけするわけでもないので、このように時間がとれないことも普通です。

    2時間でできることは少ないです。アイコンを考え始めて作るだけでも終わらないかもしれません。作業は区切りが良いところで終えておかないと、次にやるときに大変になります。制限時間内に終わらすため、発想を要求されるような作業や長くかかると思われるものはやらないようにしています。そういったものは時間の取れる週末にやったほうが私は効率的だと思います。
    細かな作業ごとでどれくらいかかりそうかを予想してから行う癖はついたように思います。これによりやる前からやる気がなくなることもあります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    『トランプ・ポーカー ~5カードドロー~』を作るのにかかった時間は約50時間でした。予想していたよりもかかりましたが、まずまずの速さでの完成ができたと思います。時間がかかったのはJokerがありのときの判定を正しく行うということです。

    今回からiOSの方にも同時にリリースを行いました。これは意外とスムーズにいっています。Unityを使っている大きな利点というところにプラットフォームによらずに動くということがあるので、これは非常に楽でした。(機種固有の機能を使ったら、面倒になると思います。)
    iOSへの対応(広告周りのSDKなどの対応)は既に行っていたので、今回はそれに従ってやり方を確立させた感じです。

    終盤にしたことですが、Unity Cloud Buildを使いました。Unityのプロジェクトをサーバーに渡し、自動でビルドしてパッケージが得られるというサービスです。放っておくとインストールして実行できるファイルが自動で用意され続けるので、複数人とアプリを作る場合は特に便利でしょう。

    ポーカーの最も古い形式であるドローポーカーの作成をしたのは、もっと新しい形式のポーカーを作るときに役に立つからというところもあります。
    現在、漫画 『LIAR GAME』で登場していた17枚のカードで行う『17ポーカー』を試作しています。新規で作るのが最も作るのが楽しいですが、過去のものを使いまわして素早く作るというのも重要だと思います。新規で作るとバグが多く生まれてしまうというのが一番大きな問題です。以前使っていたものを使うと、そういったことが起こりにくいというのがあります。
    バグの発生でゲームがつまらないというのが双方にとって避けたいことです。

    このページのトップヘ