FreelyApps

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


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

    2016年07月

    • カテゴリ:
      このエントリーをはてなブックマークに追加 Clip to Evernote
    MacBookの購入」 で注文していたMacBookが届きました。予想していたよりも1週間ほど遅くなったのですが理由があります。
    クレジットカードでの購入だったのですが、高額な商品のため本人に電話で確認するということが必要でした。 メールでこの番号に電話してというものが来て、かけてみたのですがつながらずどうしようかという感じでした。(内線の不具合っぽい? 担当部署が海外みたいだし。)仕方ないのでApple Store コールセンターに電話をしたら、Appleから電話をかけてくれるということになりました。
    それで何回目かの電話で出て、無事注文が行くことになりました。 注文が行くと翌日にはiPod touchが届きました。注文が通るまでが一番時間がかかりましたが、そのあとは順調でした。

    MacがあればiOSアプリを出せるというようにはいきません。様々な設定などがあります。開発も大変ですが、こういったセットアップや環境構築も相当大変なものです。
    徐々に進めていってアプリを8月中にはリリースできればと思っています。

    Macが来てやったことは、
    1. 箱を開ける。
    2. 取り出して鑑賞。
    3. 置くところを見つける。
    4. 電源を入れる。
    5. 初期設定。
    6. Apple IDを作る。(iCloudのメールアドレスで設定した方が良いみたいですが、気づいた時にはGmailにしていた。) 
    7. とりあえず触ってみる。
    8. アップデート。
    9. Xcodeをインストール。
    アップデート自体もアプリのインストールということでApple IDが必要です。個人情報の入力があったりと結構面倒でした。

    まずはアプリを作れるところまでいかなければなりませんね。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Pokémon GO(ポケモンGO)が配信され、日本中で遊ばれていると思います。このPokémon GOがUnityで作られているらしいので、どのようにして作られているのか考えています。(あくまでそれっぽいものを作るにはどうしたら良いかというものです。)Pokémon GOっぽいものとは、Pokémon GOを作ろうとしてできあがる妥協の産物のことです。

    まずPokémon GOがどんなゲームなのかを特徴を挙げてみる必要があります。
    • 位置情報を利用している
    • 現実の地図を簡易的に表示
    • 地図上にデータを配置
    • ARを利用し、ポケモンを現実の背景に配置
    特徴的なのはこんなところでしょうか?

    位置情報は端末がGPSを利用する機能を持っているAndroidとiOSであれば、LocationServiceを利用すれば取得できます。LocationService.Startにサンプルコードが載っているので、これは実に簡単に利用できます。必要な情報は緯度(latitude)と経度(longitude)です。自分の向いている向きはこれだとわからないので、他の方法が使われている気はします。

    緯度と経度が分かれば現在地点が特定されるので、周辺の地図データを取得しそれを描画するということができます。緯度と経度が変化すれば、データを更新するということです。データはサーバー側に保存するため、クライアント側の実装にはあまり関係がありません。(サーバー側はここが最も大変だと思いますけど……)

    ARについてはおそらく単純です。カメラを有効にしてそれを背景にしているだけだと思います。WebCamTextureを使えばカメラが撮っているものをテクスチャとして取得できるので、それを背景にすれば良いです。端末を移動させるとポケモンが現れるということを行うには、加速度センサー(Input.acceleration)を使ってカメラの向きを変えれば良いです。

    「Pokémon GOを作る」ためにはデータを作ることが最も大変であると思います。全世界の地図上にデータを置いていくというのは気の遠くなるほどのデータ作成になるでしょう。(ユーザーにデータを置かせて運営で判断する方法はとても賢い方法だったと思います。それでも初期のプレイ用データは作る必要がありますが。)

    「Pokémon GOを作る」ことは可能だと思いますが、作っても意味はない気がします。 それは位置情報を利用したゲームは常時起動しっぱなしで移動するため、2つのゲームを起動することはないからです。(メモリ使用の都合上2つ起動すると、おそらくはどちらかがメモリから消されるでしょう。)
    位置情報を利用したゲームを作ると、Pokémon GOに勝てるほどのものでないと遊ばれることはないでしょう。

    「Pokémon GOを作ろう」となったら、「まあ、Pokémon GOでもやって落ち着け」と言いましょう。遊ぶ方が楽しいですから。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    • Bounce
    • 時を感じろ!
    • 走れユニティちゃん!
    • Pick Up A Diamond
    の4つのアプリを公開停止にしました。初期に作ったものであり、アプリの作りが今のものと違うのと、あまりダウンロードされないためです。アップデートを続けていないと作りが古いままで、後になって分かったよくない点が残っています。
    そういったものを取り除くのがアップデートとも言えますが、そこにかける労力が必要なのかということを考えます。頻繁にダウンロードされ需要があるのなら、直してより良いものにするというのが普通でしょう。逆にほぼダウンロードされないものに労力をかけ続けるのは無駄でしょう。
    かけられる力に限度がありますから、なるべく完成したものには手をかけたくないのです。とくにそれが労力に見合わなければ……

    公開停止にしましたが、すでにダウンロードされた場合は引き続き使うことができます。これらのアプリをダウンロードされた方はありがとうございました。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    MacBook Proの購入予定」でMacBook Proを買うつもりだったのですが、新型がでるかもという噂だけがあり本当に今年に新しいものがでるのかわからない感じです。MacBook Proを買うことが目的ではないので、MacBookという機種を買うことにしました。MacBookは小さくてとても軽いようです。

     macbook
    本体の性能は2つ選べることがあって、モデルとCPUがそれぞれ2つから選べます。全部で4種類です。モデルというのはCPUとSSDの違いです。
    macbook-storage

    下はCPUをCore m7にするオプションで高い方のモデルを選んだ場合の選択肢です。148800円のモデルの場合はCore m7にするには30000円追加で必要です。
    macbook-cpu
    Core m7にするオプションの差額からモデルの金額の差の内訳を計算してみると、CPUの差の分が12000円だと思われます。よって、SSDの差の分は24000円となります。

    高いけれど性能が低いと嫌なので、最高の性能で注文することにしました。202800円でした。ノートパソコンの値段としてはかなり高いと思いますが、ブランドなのでそういうものでしょう。かっこいいパソコンだと思います。


    iOSアプリの開発が目的なので、ついでにiPod touchも買っておきました。Appleのページの上のタブにiPodがなくなっていてページ下部のリンクから行くようです。iPod touchには、あまり力を入れてないのかもしれませんね。
    ipod-link

    iPod touchはストレージの量だけ違い、4種類あります。(性能に関係ありませんが、色もいくつか選べます。)
    ipod

    MacBookとiPod touchで合計232600円でした。 
    MacBookはCPUの変更オプションがあるため1週間ほど後に来るようです。iPod touchは翌日に来るそうで早いですね。 

    Macを買うのは初めてなので、わくわくしています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Analyticsのカスタムイベントにはパラメータをつけることができます。Custom Eventについてでも書きましたが、Analytics.CustomEventの第2引数にパラメータをIDictionary<string,object>として渡します。パラメータの名前と値をセットにした配列を渡すだけなので、使い方を覚えれば簡単です。

    こんな感じに使います。実際のアプリで使っているコードを撮ったので、VariableManagerだのrefResultDataだのがありますが、気にしないで良いです。名前と値がセットになって並んでいるということが重要です。
    ts-old-analytics

    このカスタムイベントの情報を集めると、管理サイトでは以下のようにパラメータの一覧が見れます。上の2つはデフォルトで存在するもので、timeから下がスクリプトで書いたパラメータになります。(大文字小文字の区別はなくなるので、アンダーバーを使って名前を見やすくするのがコツらしいです。)
    ts-params

    levelパラメータは数字を区別したいため、文字列化(数字が頭につくと数字と解釈されているらしい。)して送っています。ゲームの難易度ごとでユーザーがどれくらい遊んでいるかを知ることができます。
    ts-level

    resultパラメータはユーザーの勝敗です。どれくらい勝ったり負けたりしているかわかれば、強すぎたり弱すぎたりするのを改善できます。
    ts-result

    これらの情報は非常に有用なのですが、実は失敗したことがあります。
    ある難易度を選んだユーザーの結果がどうなったのかということを知ることができないのです。Level1を遊んだ人がどれくらい勝ったのか負けたのかはわかりません。

    あるカスタムイベントに付属するパラメータのそれぞれは独立して記録されているため、組み合わせた分析ができないのです。上で言うと、levelがいくつでresultが何々のユーザーのグラフを表示することができないです。(いずれできて欲しいところです。)

    現状ではいくつかのパラメータを組み合わせた分析は以下のようにstringに情報を含めることになるでしょう。組み合わせにより、stringの種類が莫大になりやすいのでそこに注意する必要があります。
    ts-new-analytics

    Summaryという新しい項目に難易度とレベルと結果をすべて含めました。難易度の数、レベルの数、結果の種類の掛け合わせ分でも100いかない位だったので、とりあえずこのようにしました。Summaryという新しいパラメータ名にしたのは、過去のデータと区別するためです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    『トランプ・アメリカンページワン』を作るのにかかった時間は約78時間でした。前回作った『ゆにてく』と偶然にも同じ時間かかりました。

    トランプゲームのアプリはこれで4作目でして、作るのに慣れてきたかと思っていたのですが、今回は時間がかかりました。途中での複数枚出しへの方向転換やUIの大幅な変更が原因でした。
    5人だと自分の番が回ってくるのが長く待つのがつまらなかったのとバランスを調整するのが難しいことが分かりました。そのため4人で遊ぶように改善したのですが、これが非常に大変でした。結果としては面白くできたと思いますが、UIの変更はきつかったです。

    アメリカンページワンはストップ系と言われるゲームです。手札をなくすというのが目的なので、全員の現在の手札の枚数が分からなければなりません。文字で「残りX枚」と出していたのですが、一目で多い少ないが分かりにくいという欠点がありました。
    fan-layout
    今回は上のように手札を見せるようにして、あとどれくらいの手札があるかわかるようにしました。ILayoutControllerを継承してUnity UIで使いやすいようにしてみました。円周上に並べているだけですが、個々のカードもz方向に回転させています。そうしないとカードの向きがそろってしまい、きれいになりません。z方向に回転させて配置していることでカードのひっくり返しアニメ(y方向)と干渉せず次のようなアニメーションが可能です。
    fan-turn-animation

      このエントリーをはてなブックマークに追加 Clip to Evernote
    ネイティブ クラッシュ(/system/lib/libhoudini.so.4.0.5.44806)というクラッシュが報告されていました。これまでに4回発生していたようです。発生頻度は高くないようですが、特定の端末達(ASUS MeMO Pad)で発生していたので気になりました。
    の4種類で発生しました。いずれも/system/lib/libhoudini.soでクラッシュしていました。これだけ見てもよくわからないので、これらの端末の共通点がないかを調べてみました。 
    端末のホームページにあるスペックを見ると、CPUは次の通りでした。
    •  インテル® Atom™ Z3745 クアッドコア
    • Intel® Atom™ Z2520 Dual-Core, 1.2 GHz
    • インテル® Atom™ Z3580 クアッドコア, 2.3 GHz
    • インテル® Atom™ Z3745 クアッドコア
    インテルのAtomが並んでいます。アプリに「CPUの相性があるのかな?」と思いつつ、原因はこれ以外には思いつかないというものがありました。
    ずいぶん前に「Unityでビルドしたapkのサイズ」 という記事を書いたとき、アプリの容量がx86系端末のためのライブラリが含まれて大きくなるということを知りました。このx86系の端末とは、インテルのCPUを使ったAndroidのことです。x86用のライブラリを含むとアプリサイズが大きくなるので、これを除外することができます。
    予想ですがx86用のライブラリがないとクラッシュするx86系の端末があるのではないかと思います。

    Android4.0以上向けにAPKを出せば100MBのAPKでも良いので、次回からはDevice FilterをFATの設定で出してみようと思います。
    とりあえず現時点ではMemo Padをダウンロードの対象外とすることで対処しました。(どれがインテルのCPUを使っているか調べるのが面倒だったので、MeMO Padという名前のものをすべて選択しました。)
    memopad


    『トランプ・スピード』以外のアプリでは発生報告がありません。おそらくは5000以上DLされていて、クラッシュが発生する端末で遊んでいる人がいるということだと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    7/9に『トランプ・アメリカンページワン』をリリースしました。
    tap_title

    トランプゲームの「アメリカンページワン」を遊ぶことのできるアプリです。台札にカードをつけて行って手札をなくしたらあがりというゲームです。UNOによく似たゲームです。(UNOもアメリカンページワンもクレイジーエイトというゲームから派生したようです。)

    ディール(カードを配って点数をつけるまでのこと)ごとに点数をつけていき、決められた回数行った後で集計します。合計点が多いほど勝ちとなります。このアプリでは1、5、10回のディールで1ゲームです。

    A(スキップ)、2(ツー)、3(スリー)、8(エイト)、9(リバース)のカードが特殊カードをうまく使うことが重要です。特に2、3は相手にカードを引かせるカードなので、攻撃のために使うか防御のために温存しておくかが考えどころです。

    トランプ・アメリカンページワンでは、手札が11枚以上になったらバーストするというルールがあります。これは持てるカードを増やし続けるとゲームが面白くなくなってしまうので、それを禁止した措置です。ゲームに緊張感を与えるためにあるのですが、バーストさせるという戦略もかなり使えます。開始時には5枚のカードがあるので、開始直後に3を2枚以上出されるとバーストが発生します。
    バーストするとバーストした人は全ての失点を負い、他プレイヤーに得点させてしまうという大きな損害を得ます。

    tap_0709

      このエントリーをはてなブックマークに追加 Clip to Evernote
    開発中の『トランプ・アメリカンページワン』の紹介動画を作りました。いつものようにYouTubeとニコニコ動画にアップしました。アプリの予約もこちらのページで受け付け中です。 




    この動画をアップした時には自分の番ではカードを出すか引くかを決めれませんでした。 これは意図したものであるのですが、プレイヤーの選択肢が少なく自動で進んでいっている感じが強かったと思います。現在はこれを修正し、常にカードを引くことを選べるようにしました。出せるカードがあったとしても、あえてカードを引くということができます。(8とか3とかを温存するといった戦略がとれます。)
    真ん中の順番とスート表示のUIも修正を行いました。動画では動いてないのですが、今はアニメーションするようになっています。これでかなりわかりやすくなっています。
    tap0702

    元々の出せるカードがあるときは出さなければいけない、出せないときはカードを引くというルールはプレイヤーの行動を見て持っているカードを推測するためのものでした。カードが出せないということは現在のスート、数字、8のカードを持っていないということがわかります。特にスートがないというのは、相手を攻めやすくなるので重要な情報です。

    カードをいつでも引けるということで格段に選択肢が増えるわけです。出せるカードがある状態で1枚引くと、引いた後に必ず出すことができるわけなので、出せるカードを温存しようか迷うときは使える戦法です。
    このアプリ独自のルールとしてバーストがあります。手札が11枚以上になると負けるというルールです。自分の番の終了時に10枚以下になっていればよいというものではないので、11枚以上になるときがあると負けてしまいます。10枚の手札があるときにカードを引くと自動的に負けてしまいます。(出せるカードがない場合はどうしようもないですし、わざと11枚目を引くことも可能です。)
    バーストはある程度の緊張感を入れるためと、手札が増えすぎてUIが使いにくくなる問題を解決するために導入しています。このルールがあるため、開始直後にスリーでバーストさせるというのも効果的な戦い方になります。5枚の手札がはじめに配られるので、すぐに2枚のスリーが連続で出されると確実にバーストします。
    3枚のスリーが
    連続で出されると、残り1枚(つまりページワン)でないと防げません。4枚のスリー連続で出されると、必ずバーストになります。4枚のスリー連続で出されるときは、まずないと思いますがスリーをはじめに出した人がバーストするので相当おもしろい展開です。

    このページのトップヘ