FreelyApps

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


    アプリ『トランプ・7並べ』を公開しました。
    Android/iOS https://goo.gl/zsFces

    2016年03月

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityでゲームを作るとしてもやはりプログラミングが必要です。通常のゲームプログラミングとは異なる考えで作ることにもなるので、プログラミングをやったことがある人はむしろ混乱するかもしれません。
    Unityのプログラムはスクリプトと呼ばれ、 これをゲームオブジェクトというものにくっつけることで動きます。ゲームオブジェクトは様々な機能のスクリプトをくっつけることができるものです。”もの”というのはそれ自体で何かするのではなく、機能をつけることでライトになったり、カメラになったり、モデルになったりと何でもなれるけれど何でもないという置き場所のような意味です。

    何かを始めるときに覚えることが多いと嫌になります。UnityのGUI操作は覚えることがそれなりに多いので、プログラミングはとりあえず作れるようになるくらいで始めるのが良いと思います。少なければいくつでも良いですが、3つだとわかりやすいと思ったので3つの関数について説明します。

    ゲームを作るために必要な3つの関数とは、
    1. Update
    2. Start
    3. Awake 
    のことです。この名前をつけたメソッドはUnityから呼び出されて処理されるという特徴があります。これはイベント関数と呼ばれています。Updateは毎フレーム呼ばれる最も重要な関数です。ゲームの処理はここに書いていくことになるでしょう。この関数だけあればゲームを作ることもできますが、初期化は別に分けられていた方が都合が良いです。そのための処理がStartとAwakeです。 
    名前からだと微妙なところですが、Awakeが先でその後にStartが呼ばれます。通常はStartだけ使うだけで十分だと思います。AwakeとStartの微妙な違いを理解できるようになったら、他のイベントも覚えていることでしょう。

    よくAwakeとStartが呼ばれないということで問題になることがあります。大抵の場合、そのスクリプトがついているゲームオブジェクトがアクティブでないかスクリプト自身が有効でないと思います。
    それ以外で呼ばれないとすれば、ゲームオブジェクトにつけてないか名前の打ち間違えでしょう。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    3/28に「トランプ・ナポレオン」を3.1にアップデートしました。
    Android6.0のパーミッションシステムの変更により、 アプリのスクリーンショットを保存できるかの判定を入れないとSNSの連携時にファイルを正しく送れないということになりました。これに対応する方法は以前記事にしましたが、トランプ・ナポレオンがしばらく更新していなかったのでチェックに時間がかかりました。

    今回のアップデートではAIにも手を入れています。
    ナポレオンと副官は役札(オールマイティ、正ジャック、裏ジャック)を持つことがほとんどで、どちらも役札を持っていることがよくあります。 ナポレオン軍としては役札を分散して出したいわけですが、マストフォローのため意図せず被ってしまうことがあります。
    基本的には副官はなるべく後に役札を出せばいいのですが、ナポレオンが持っていると思われる役札次第では少し早目(7~8トリックくらい)に出した方が良いです。ナポレオンが副官を選ぶときに指定したカードが裏ジャックとすれば、オールマイティ、正ジャックを持っていることが推測できます。こういう場合8トリック目にしてもナポレオンがそれらを出していないなら、副官は裏ジャックを出すべきだと言えます。9、10トリック目をナポレオンの役札で取ると考えているはずだからです。
    AIの修正はこのような役札を出すときの思考の改善になります。 

    また、セイム2についても改善をしています。2は最弱のカードなので、真っ先に処分されるカードです。セイム2があるときは、セイム2が起こり得るならなるべく温存するカードになります。
    以前のAIでは、2が捨てる候補に入りやすかったです。今回の修正では、セイム2の可能性があるスートの2については捨て札の候補に入りにくくしています。絵札とかの兼ね合いもあるので100%温存とはなりませんが、3とかに比べれば捨てられにくくなります。 

    アップデートの内容を解説してみましたが、ナポレオンに詳しくない人だと何を言っているのかわからないと思います。ざっくり言えば、AIが強化されたということです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    開発中のスピードのアプリのUIがほぼ完成してきました。ゲーム的に重要なのは難易度ごとのAIの作成が残っていて、他にはタイトルやら細かな部分を作ることが残っているところです。
    今週くらいには予約を始めて4月中にはリリースできると良いかなという感じです。 

    トランプのアプリは今までと同じように名前をつけるので、『トランプ・スピード』 という名前にします。スピードは日本では有名なゲームなので、わかりにくいことはないと思います。シリーズものみたいなことで名前はこうすることにしました。
    スピードはトランプの中では変わったものになります。普通のゲームは順番にカードを出していくときに一人ずつ順番を守ります。 特に思考が要求されるゲームではそうです。スピードは出し方も重要ですが、どちらかと言えばスポーツよりで以下に早くカードを出せるかというゲームになります。アプリでスピードを再現するにあたり、カードの出した順番が見えることが重要だと思いました。
    当たり前のことを言うようですが、後に出したカードは表示が前に来ると、後に出したのだと知覚できます。プログラム的には表示の優先度のことです。現実でのカードは厚みを持ち、出されていくカードは重なっていきます。表示位置をずらしたり、3Dモデルを使って影を落とすことも効果的だと思いますが、最も重要なのは前面に表示されているカードがより後に重ねたものであるということです。

    2週間くらい前の画面が以下になります。
    old-input-ts-main
    画面上側のスペードの10と画面下側のハートの9が他のカードに覆いかぶさられているのがわかります。本来ならこれらのカードは移動中なので、後に出したカードのはずです。つまり、スペードの10とハートの9は前に表示されるべきです。このときはUIの優先度を制御してなかったので、このようになっていました。

    今は以下のように正しい表示になっています。優先度が動的に変わっていることを示すためgifになっています。
    input-ts-main
    クリックしたカードが最も前に表示されるようになっています。更に自分と相手のカードについても順番を考慮しています。相手と自分のカードで後に出されたものほど前に表示されます。

    どのように作っているかというと、自分と相手の場札(横に4枚並んだカード)がひとつのUIになっています。構造を見れば察しがつくとは思いますが、一応解説します。
    Cardsというのが表示のための部分です。Cardsの下に1枚のカードに対応するother0~3とmy0~3があります。otherは相手のでmyは自分の方のカードです。Unity UIではヒエラルキー上で見れる階層で下にあるものが最も上に表示されます。(同じCanvas内での話です。)カードを出すという処理をするときに対応する表示用のUIのtransformを取得し、SetAsLastSiblingで子の中で最も後ろに置くということをしてやれば表示を最優先にできます。
    ts-inputUI
    Inputがあるのは表示の優先度が変わると、それらにButtonをアタッチして押せる用にしているとまずいからです。常に固定した位置にタッチ判定を置くためにより優先されるところに入力用の透明なUIを配置しています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5.3からJsonUtilityという機能が追加されました。
    オブジェクトをJSONにすることとJSONからオブジェクトを作る・値を入れることができます。JSONはオブジェクトを文字列で表現する方法のことであり、単純な仕組みでエンコードされるために広く使われているフォーマットです。C#ではxmlやバイナリの形式にオブジェクトをシリアライズ(ファイルに保存できるような形式にすること)できますが、JSONはライブラリを使わないと使えません。 
    Unityで公式にサポートしてくれると使いやすくなるので、データの持ち方に1つ選択肢が増えたことになります。

    JSONの形式は文字列であるので、拡張性が高く柔軟だというのが特徴だと思います。あるオブジェクトAをJSONにして、別のオブジェクトBにデシリアライズ(オブジェクトに戻すこと)が可能です。なぜならJSONが文字列であり、データに何が含まれているのかを表しているだけだからです。

    これと異なる特性をもつのがバイナリです。データをメモリ上での表現をそのまま出力したような機械にとってわかりやすく、人間にわかりにくい表現です。
    バイナリ形式(BinaryFormatterを使った場合)は保存したオブジェクトと同じ型でデシリアライズしないとエラーになったり、バイナリにはフィールドがあるのに復元するクラスにはフィールドがなくなった場合にもエラーが起きます。これはBinaryFormatterで作ったデータになんらかの型情報が含まれていることを表しているでしょう。データがどういったクラスにより作られ、どういった要素が含まれているかがデータにあるために変更すると一致しなくなるのです。(どういった条件でデシリアライズできなくなるかまで調べていませんが、基本的にはフィールドの変更はしない方が良いと思います。)
    バイナリ形式はクラスの型を変更できないデメリットがありますが、文字列の解釈がないため一般的に変換が高速です。バイナリ形式の場合で将来拡張するなら、クラスに余分なフィールドを入れておくことが一番良い対策になります。余りに多くの使わないパラメータがあると無駄が大きいので、どれくらいの容量を取るかは判断が難しいところです。

    JSONを使う方が頻繁にアップデートが存在するアプリには合っているので、これを使っていた方が困らないことが多いでしょう。
    JsonUtilityは現在のところ型を利用する方法のみが使えるようです。JSONにシリアライズ、JSONからデシリアライズするためには変換用にクラスや構造体が必要だということです。 (intの配列とかをそのまま渡してもシリアライズできないです。)JSONに対してそのままデータを検索したり、データを追加したりするのは将来的にはあり得ると思います。(ドキュメントに「The JSON Serializer does not currently support working with ‘unstructured’ JSON」とあります。currentlyなので将来的にはサポートする気がします。)


    JsonUtility.ToJsonはそこまで注意することはないです。publicなフィールドをJSON化してくれます。NonSerialized属性をつけるとそのフィールドは無視されます。JSON化されるものが何かはインスペクタ―上で表示されているものと一致しているようです。例えば[SerializeField]がついたprivateなフィールドはJSON化されます。また逆に[System.NonSerialized]をつけるとpublicなフィールドでもJSON化されなくなります。
    ToJsonの第一引数はオブジェクトを渡します。
    [System.Serializable]
    public class Test
    {
        [SerializeField]
        private int a = 1;
        public int b = 2;
        public int[] c = { 12345 };
     
        public float f = 0.22f;
    }
    というクラスを定義して、これを作りJSONにしてみます。
    Test test = new Test();
    var json_test = JsonUtility.ToJson(test);
    というようにすると、json_testには以下の文字列が入っています。
    jsonNotPrettyPrint
    fの値が0.22に一致しないのは誤差のせいでしょう。JSONのデータはわかりやすい構造をしていて、データが正しいかのデバッグがしやすいです。

    第ニ引数にtrueを渡すと、下のように見やすく出力されます。改行とかインデントのための空白やタブは情報を持っていないので、情報としては無駄です。保存する場合やプログラム内でのやり取りにはPrettyPrintは使わないようにし、デバッグ用に使うのが良いです。
    jsonPrettyPrint


    JSONからオブジェクトを作るのは2通りあります。
    JsonUtility.FromJsonJsonUtility.FromJsonOverwriteです。
    Test obj = JsonUtility.FromJson<Test>(json);
    のようにすると、文字列jsonからTestクラスが作られます。使い方はシンプルなのですが、与える文字列jsonには注意が必要です。文字列はJsonUtility.ToJson等を使って同じクラスを表すJSONを使うのが通常でしょうが、特に制限はないです。全く異なるクラスから作られたJSONを渡したり、自分で文字列を作って渡しても問題ありません。
    そういった場合、余分なフィールドや型の異なるフィールドが出てくるでしょう。FromJsonはうまくできているようで、これらのものはすべて無視されます。FromJsonは型パラメータに渡したクラスのシリアライズできるフィールドを対象にし、JSONからフィールドの名前と型が一致したものだけ解釈しています。
    対応するものがないフィールドについては注意が必要で、このときフィールドはデフォルト値にされます。(例えばintだったら0です。)

    Unity5.3.4f1で試したところ、対応するものがなくてもデフォルト値にされてないように思います。
    [System.Serializable]
    public class Test2
    {
        public int a = 0;
        public int c = 5;
    }
    というクラスを新たに作り、
    Test test = new Test();
    var json = JsonUtility.ToJson(test);
    print("json:" + json);
     
    var from_json = JsonUtility.FromJson<Test2>(json);
    print("from_json:" + JsonUtility.ToJson(from_json));

    のように処理を書いてみました。 Test型のインスタンスをJSONにしたものを出力し、そのJSONからTest2のインスタンスを作っています。作ったTest2型のインスタンスのフィールドがどうなっているか知るため、JSONで出力しています。
    実行した結果は以下のようになりました。
    fromjson

    jsonにはcというフィールドがないので、Test2としてデシリアライズするときにcがデフォルト値0になるかと思ったのですが、そうはなりませんでした。JsonUtilityのバグかドキュメントのミスかも知れません。


    JsonUtility.FromJsonOverwriteはデシリアライズするJSONに復元しようとするクラスの対応するフィールドがない場合、そのフィールドには何もしません。
    上に述べたようにJsonUtility.FromJsonでも何故かフィールドの値が変更されてないため、現状ではインスタンスの生成の有無で使い分けることになると思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Multiplayerが正式なものになり、サーバーの利用料金が公表されました。公式のページは以前と同じでここです。 
    unet-free
    まずはじめに無料で使えるものについて載っていました。Personalだと20CCU、Professional版だと200CCUまでになります。CCUはconcurrent usersの略です。同時に接続できるユーザーの数のことです。
    PersonalもProfessionalも追加料金なしで開発目的に(これがちょっと気になっています。) Unity Multiplayerを利用できるとあります。
    Professionalは利用料金が月額75ドルなので、こういった書き方をされているのでしょう。Professionalの権利を1500ドルで買っている場合はたぶんそのまま使えるのでしょう。ここに料金を載せておくと紛らわしいと思うのは私だけでしょうか?

    unet-fee

    従量課金分についてはその下に載っています。
    マッチングサーバーとリレーサーバーを使う場合は、通信量に応じて課金が発生する仕組みのようです。1GBあたり0.49ドルという設定なので、50円くらいです。これだと高いのか安いのかいまいちわかりませんね。

    サイトのもう少し下に見積もりをしてくれる入力欄があります。ここにCCUをいれて、通信の発生頻度や量を入れるとひと月当たりの費用が表示されます。
    Estimated cost/monthが入力された内容から予想される料金です。Maximum cost/monthはEXPECTED UTILIZATION ON AVERAGE (%)が100になった場合、設定した内容で限界まで使った場合の料金ということです。

    100CCUで見積もってみます。1ユーザーが1秒間に20回の通信をし、1回の通信が200バイト消費するようなオンラインゲームになっているとします。これが25%の割合で稼働しているとすると、1月の料金は119.93ドルです。通信量での課金なので、100CCUというのは常に100人がゲームの通信機能を利用しているという意味になります。よほどのことがない限り、常に最大数のユーザーが利用することはないので、同時に利用する最大人数をそのままこの見積もり欄にあるCCUにいれても見積もりはかなり大きめに出ると思います。

    unet-fee2

    料金はともかくサービスの開始時なので、いろいろ気になることが多いです。Unity Proでないとサービスを買えないとあるのも変な気がしています。
    有料のサービスは申し込むことで有効になる仕組みのようなので、自動的に料金が発生することはないようです。Personalユーザーの場合のリリース版はどうすればいいのかを発表してほしいです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityで新しいC#スクリプトを作成すると以下のような状態になっていると思います。
    これをそのまま使っても、編集しても良いのですが、いつも使う名前空間などはテンプレートに入っていると楽で良いと思っていました。System.Collections.Genericを使うのでSystem.Collectionsは使ったことがないですし、英語のコメントも慣れてくると要らないです。

    あるC#スクリプトをDuplicate(Ctrl+DかEdit->Duplicateでアセットの複製ができます。)してリネームするでも良いのですが、ちょっと手間なのでテンプレートを変更することでより便利になります。
    スクリプトのテンプレートを追加する」 Unityな日々(Unity Geek)より
    でその方法を解説がされているので参考に試してみました。
    スクリプトのテンプレートが保存されているのは、私の場合
    C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplatesでした。Unityのインストール先を見つけてEditor\Data\Resources\ScriptTemplatesと探していけば良いでしょう。
    script-template
    フォルダには以上のようなテンプレートが並んでいます。C#のスクリプトのテンプレートは81-C# newScript-NewBehaviourScript.cs.txtです。これを自分の好きなように編集して上書きしてやると、Unityで作られる新しいスクリプトが変更されます。(Unityが読み込むファイルの変更なので、全プロジェクトに影響します。)

    このファイルを「81-C# newScript-NewBehaviourScript.cs」という名前でスクリプトのテンプレートが保存されているフォルダにコピーすると、Createメニューに項目が以下のように追加されるはずです。(別名にすることで元々のテンプレートを保持したままメニューに新しいものを追加されるようです。古いのが要らなければ上書きでも構いません。テンプレートのファイル名はハイフン区切りで意味を持つようです。)
    myTemplate
    この新たなメニューでスクリプトを追加すると以下のようになります。 
    usingにSystem.Collections.GenericやUnity5になってから追加されているよく使う名前空間を入れています。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityで作業している時間がどれくらいなのか知るためには、ストップウォッチみたいなもので測ったり、時計を見たりすることで大体測れます。しかし、いちいちそういったことをするような習慣を身につけなければ測り忘れたりすることは起こるので面倒だと思います。

    UnityのEditor拡張で自動で作業時間を測ることができます。この拡張は他の使い方に応用できそうなので、シンプルなままでソースを載せておきます。
    使うものはEditorApplication.updateInitializeOnLoadMethodAttributeです。


    [InitializeOnLoadMethod]をメソッドにつけておくとエディターの起動時にそのメソッドが呼び出されます。そこにエディターで毎回行ってほしいことを登録することで定期的に計測結果を保存させるようにしています。
    EditorApplication.updateは秒間100回程度呼び出される処理を登録しておくために使います。起動してからの時間を測り、経過した時間分だけ足してEditorPrefsで値を保存しています。 
    EditorPrefsはPlayerPrefsのエディター版でPlayerPrefsとは異なる場所に保存されるデータです。WindowsではレジストリのHKCU\Software\Unity Technologies\UnityEditor 5.xというキーの中に保存されます。エディターのメジャーバージョンごとに共通の場所に保存しているのでプロジェクトごとに保存される場所を変えるということができないことに注意してください。

    制御用のウィンドウを作ったり、一定時間ごとに処理をするようにしたりと色々拡張の余地はあります。EditorApplication.timeSinceStartupで時間を計測しているのが悪いのか時間の計測がうまくできないことがあります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    アプリのランキングとレビューを掲載されているサイトAppliv『FlashNumbers』のレビュー記事が掲載されました。

    アプリの説明、操作方法から裏技についてまで説明されていて非常にわかりやすいレビューでした。
    特に裏技については、「確かにその通り」というものでした。徐々にスピードアップするので、裏技に頼るのも限界がありますが、低レベルの間はかなり有効な方法だと思います。どうしてもクリアできない方は使ってみるのも良いかもしれません。(裏技なんて認めんという人は自身の力で是非どうぞ。)

    分類が脳トレゲームになっていて何だかDSのときのゲームを思い出しました。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    最初のアプリを出したのが2015年の2月中旬くらいなので、アプリを作り始めてもう1年ほどになります。良い機会なので、作ったものを振り返ってみようと思います。

    bounce
    Bounce』が最初のアプリで2015年2/6にリリースされました。はじめに作ったアプリなのですが、3Dのアクションゲームでステージクリア型です。半透明の床を下からは通り抜けられるけれど、上から落ちた時は通さないという一方通行のギミックを作るのに苦労した覚えがあります。
    ゲームを完成させるという意味では重要なものになりましたが、ダウンロード数は全然だめでした。成果としては失敗でした。

    timekeeper
    2作目のアプリは『時を感じろ!』です。10、30、60秒が経ったと思ったら、タップするというだけの体感ゲームでした。1作目が時間がかかっていたので、すぐに作れるものを思いついて数日で作ってみようという時にできたものです。1作目を出してすぐの2/13にリリースをしています。ありふれていたものですし、正確に測れたところでどうなるわけでもないので、駄目でした。

    48c96a79.png
    3作目は『走れユニティちゃん!』というアプリです。これは3/29にリリースしています。画面を見てもわかるようにゲームっぽくなっています。無限に走れて、障害物を2段ジャンプで避けるという内容です。確率的な分布によって障害物のパターンを生成し続けるという方法でステージを自動生成しているのですが、バランスが微妙かも……という感じになってしまいました。ニコニコ動画での再生が2000超と多かったのですが、見た目は良かったはずなのが更に残念というところです。

    PUAD
    4作目は『Pick Up A Diamond』です。Unity5にして、いろいろなサービス(Unity Ads、Everyplay)などにも対応していたら、遅くなって6/19になりました。Unityのチュートリアルにほぼ同じゲームがサンプルとしてあります。このゲームはスマホの加速度センサーを利用して、アプリ化してリリースしました。物理パズルみたいなものを作ろうとして、いろいろギミックを入れてみました。4作目にしてチュートリアルに戻るという一見後退したように思いますが、当時はおもしろいものができたと喜んでいました。
    しかしながら、結果は駄目でした。パフォーマンスも十分に出ずハイエンド機種でないとフレームレートが落ちるというのも問題でした。うまくできたと思っていただけに「もう駄目かも」としばらく落ち込みました。

    Screenshot_2015-09-17-23-42-44
    5作目は『トランプ・ナポレオン』を作りました。これこそ起死回生のアプリでした。新しいゲームを作るよりも既存のゲームを遊びやすく作ろうということで一番好きなトランプゲームとしてナポレオンのアプリを作りました。
    9/26にリリースしてから現在に至るまで継続的に遊ばれていてFreelyAppsとしては一番成功したアプリと言えます。トランプゲームのアプリはそれなりにありますが、多くは一人遊び用のソリティアです。ナポレオンは5人専用と言ってよいゲームで当然コンピュータとの対戦になるのですが、トランプ・ナポレオンではオンラインでの対戦に対応しています。この対応に1カ月くらいはかかりましたが、オンライン対戦は特徴となるくらいの機能なので実装できて良かったと思います。実装も難しいのですが、遊んでくれるデイリーユーザーが大勢でないと対戦ができないので、遊んでくれる人がもっと増えると嬉しいです。

    tgi-title
    年を越して2016年の2/6に6作目の『トランプ・ゲスイット』を出しました。トランプのアプリを作るのが私には合っていると思ったので、ナポレオンに次ぐアプリを作ろうとしていました。それでゲスイットという簡単なのにおもしろいゲームをたまたま知ったので、そのアプリを作ってみました。
    ルールが単純なため、AIをどうしようかと悩みました。ゲスイットは相手の質問が真実か嘘かを見抜くのが本質なので、AIは人間が考えるように振舞わなくてはいけないのです。ランダムではつまらなく、決まった動作でもつまらない。困ったので、AIが自分で学習するようにして勝手に考えるようにしました。強化学習という方法でAIが自力で挙動を変えるのは良かったのですが、ゲームとしてはいまいちだったかもしれません。
    ある程度学習をこなすまで全く考えないので、その間のゲームがつまらないことが起きました。そのため遊んだ人からつまらないと評価されてしまい、残念な結果となりました。(現在はアップデートで改善されています。決まった動作と学習のハイブリッドという形で落ち着きました。)

    flashnumbers-title
    つい最近3/1に7作目の『FlashNumbers』をリリースしました。画面に一瞬だけ表示される数字を覚えて入力するだけというシンプルなゲームです。動体視力を鍛えるアスリートの話を聞いたときに「こんなのはどうだろう」ということで作ってみました。
    中心となる仕組みは割と簡単に終わったので、デザインをちょっと凝っています。ゲームのバランスも良い感じにするのが結構大変だったと思います。
    Google Playのカジュアルのジャンルに出して1週間程度は全然ダウンロードされなかったのですが、宣伝されてレビューがついてから一気にダウンロードされるようになりました。今までで最も早いペースで遊ばれていると思います。このまま成長してくれることを期待しています。

    1年で7つのアプリを作りました。1つ完成させると、次のものが完成させられるかはなんとなくわかってきたと感じます。自分が好きなものを作ったり、よく知っているものを作るのが私には合っているようです。そんなわけでトランプのスピードのアプリを現在作成中です。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    FlashNumbers』は3/1にリリースした新しいアプリです。ストアの説明文を見れば、どんなアプリなのかすぐわかり遊べるくらい単純な遊びです。

    リリース時は10くらいのダウンロード数でした。これも予約トップ10で予約してくれた人達がダウンロードしてくれたと考えられるので、自然にユーザーが増えてというものではありません。
    そんなわけでリリース日にダウンロードがされた後、1週間程度ほぼ0という感じで過ぎました。こうなってくるとランキングは下がっていき、ランキング外まで下がり、もうダウンロードされることはなくなります。(もちろん他のアプリを出したりして、その開発者の他のアプリを使ってみようということでダウンロードされることはあります。)おもしろいということも重要だというのは言うまでもないのですが、人目に触れ続けなければ消えて行ってしまうのです。

    3/9にAndroid PLUSにて”動体視力と記憶力の限界に挑む「FlashNumbers」”という記事を掲載していただきました。これはアプリ開発者による紹介を行えるサービスというもので、宣伝になります。
    それが掲載された日に50くらいのダウンロードがされました。しかも遊んでくれた方の評価がよかったので、ランキングが上昇し、更にダウンロードされるという好循環を生みました。

    ranking-casual312
    さっきスクリーンショットを撮ったのですが、現在はカジュアルの新着無料トップで23位にランクインしています。23位だとすごくないように感じますがカジュアルに出ているアプリの数は相当多いので、私としては大変なことだと思っています。
    また評価も現時点では5.0になっています。 これは最高評価になります。
    レビューはどうしても感情が入ってきますので、アプリの好き嫌いでいずれ5.0にはならなくなるでしょう。今はとても良い評価がついていて嬉しいです。

    作っているときはおもしろいと思って作っていますが、作っていくうちにおもしろさを信じられなくなっていきます。リリースしても全然遊ばれないとネガティブになってしまいます。作ったアプリが遊びたい人に届けるのは、作るのとは別の難しさがあると思いました。 

    このページのトップヘ