FreelyApps

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


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

    2015年11月

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity MultiplayerはUnity 5.1から追加されたオンラインマルチプレイヤーなゲームを簡単に作るための仕組みです。これによって楽になったことは間違いないのですが、まだまだ発展途上という感じで実際に使われていることは多くない気がします。
    その原因の一つとしては、日本語ドキュメントの準備に時間がかかったことがあると思います。はじめはUnityの公式ドキュメント上で英語版しかなくそれを読むしかないという状況だったのです。今は「マルチプレーヤーとネットワーキング」という日本語の公式ドキュメントが公開されています。


    いくつかのブログでUnity Multiplayerについて解説されているのでリンクを載せておこうと思います。

    テラシュールブログより
    【Unit 5】Unityでマルチプレイヤーなゲームを作る入門(1)」 
    Unityについて解説している超有名なブログです。キャラクターの移動を同期するサンプルを説明されています。ちょっと試してみたい人向けの解説です。

    凹みTipsより
    Unity 5.1 から導入された新しいネットワーク機能の UNET について詳しく調べてみた」 
    公式ドキュメントの内容を日本語でわかりやすくまとめられています。Unity Multiplayerを使って作られた3D空間を歩き回れるチャットのアプリケーションを公開されていて、Unity Multiplayerを使ったデモをすぐに体験することができます。このデモのような使われ方が最もUnity Multiplayerに向いていると思います。(リアルタイムに同期して、プレイヤーは自由に出たり入ったりする)
    日本語ですが公式マニュアルの説明が元で少しレベルは高めです。

    ひよこのたまごより
    【Unity9】UNETでマルチプレイヤーなオンラインゲーム開発【UNET1】」 
    こちらの解説動画を日本語で記事に起こしたもののようです。1つの記事だけでなく色々なトピックを上げられています。位置の同期のやり方から始まり、ゲームオブジェクトの生成・破棄の同期、マッチメイクといった内容が解説されています。
    動画が英語なのが最大の障害ですが、それ以外は丁寧に段階を追って進んでいくため習得しやすいと思います。手を動かしつつゆっくりと習っていく感じです。


    上記の記事の気にいったものでもUnity Multiplayerのさわりを試すことができますが、ここでも説明しようと思います。
    キャラクター(Cube)の移動を同期するというサンプルを作ってみました。キャラクターを動かすスクリプトも作りましたが、これはなくても試すことが可能です。

    必要なものは
    • Network Manager
    • Network Manager HUD
    • Network Transform
    • Network Identity
    の4つです。これだけあればキャラクターの移動を異なる端末間で同期することができます。
    実際に異なる端末間で通信を行うためには相手を見つけなければなりません。IPアドレスがわかればできますが、IPアドレスは一定でなかったりして特定は結構難しい問題だったりします。ここらへんの話はマッチングやマッチメイクといった内容になるので今回は省きます。
    同じPC上で複数のプログラムを動かして通信を行うことにします。ひとつのPCしかなくてもPC内で通信ができるのでテストが簡単です。

    まず最も重要なNetwork Managerを用意します。Network ManagerコンポーネントとNetwork Manager HUDコンポーネントを同じゲームオブジェクトにアタッチするだけです。
    Add ComponentのNetworkというカテゴリーにまとまっているようです。
    networkcomp

    アタッチするところはどこでも良いのですが、今回はMain Cameraにくっつけました。特に設定は行わずアタッチだけしてください。
    networkmanager

    Network Managerの設定はプレイヤーをセットするところが残っていますが、まずはプレイヤーを作ります。ドキュメントではプレイヤーオブジェクトと呼ばれているもので重要なものです。
    今のところは通信が確立するたびに作られるゲームを遊ぶ人を表すものと考えて良いと思います。自分で制御できない他人のゲームオブジェクトがシーン上に現れます。

    プレイヤーの制作はプレハブを作るだけです。目に見える方がわかりやすいのでCubeを使います。Cubeをプレハブ化して、Network IdentityとNetwork Transformコンポーネントをアタッチします。
    Network IdentityにあるプロパティにLocal Player Authorityというものがあるのでそれをtrue(下の画像のようにチェックを入れる)にします。Network Transformコンポーネントがこの値を見て同期を行うべきか決めているのでチェックしないと位置の同期がされなくなります。
    他の設定は変更しないでそのままにしてください。
    networkplayer
     
    プレイヤーのプレハブができたら、 Network Managerに設定を行います。
    Spawn Infoを開いて、Player Prefabという項目があるのでさっき作ったプレイヤープレハブ(ここではCubeという名前)をセットします。これによりプレイヤーがNetwork Managerに認識されます。
    nmplayer
     
    以上で手順は完了です。これで通信してCubeの位置が同期されることを試してみます。Editor上での実行とexeを作ってそれを実行して通信を行っています。

    左側の2画面の上がシーンビューで下がゲームビューです。右側のウィンドウがexeの実行画面です。
    どちらも起動してからウィンドウにGUIでボタンが表示されています。 
    まず片方でLAN Hostを押し、その後にLAN Clientを押します。こうするとPC上で通信が行えます。左の
    Editor上では自分のプレイヤーをシーンビュー上で動かしています。ゲームビューでも動くのは当然ですが、右のexeの方でも位置の変化が反映されているのがわかります。これは通信をして位置の同期を行われていることを表しています。
    networkdemo

    最後にキャラクター(Cube)を動かすスクリプトを載せておきます。このスクリプトをキャラクターにアタッチすれば方向キーで移動させることができます。
    isLocalPlayerというプロパティで自分のものかどうか判定しているので、全部が動くのではなく自分のプレイヤーだけが動きます。

    using UnityEngine;
    using UnityEngine.Networking;
    using System.Collections;

    public class Move : NetworkBehaviour
    {
        public float fSpeed = 0.1f;

        void Update()
        {
            if (isLocalPlayer)
            {
                float vert = Input.GetAxis("Vertical");
                float hori = Input.GetAxis("Horizontal");

                transform.Translate(new Vector3(hori, 0, vert) * fSpeed);
            }
        }
    }
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    アプリのランキングとレビューを掲載されているサイトAppliv『トランプ・ナポレオン』のレビュー記事が掲載されました。
    レビューページについているタイトルが何だか良い感じです。気になる方は是非リンク先で見てください。ちょっと思いつかない表現でした。
    アプリの紹介で3つのポイントにまとめてられるのもぱっと見れて便利なんだろうと感じました。たぶん無料の(有名なところが作ったものではない)アプリを遊ぶ人はいろいろ探して遊ぶでしょうから、ポイントがまとまっているとわずかな時間で興味を引けるのかも知れません。

    Appliv内で掲載されているアプリはランキングの形式で表示されていて、上位に入ったら相当ユーザーが入ってきそうな期待があります。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    クソゲーをレビューしていくというサイトクソ研にて『トランプ・ナポレオン』のレビュー記事が掲載されました。

    おそらくですが、レビューをしてくれた記者の方はナポレオンをやったことがなかったのだと思います。はじめての人がナポレオンについての長~い説明を聞いたら嫌になるという当たり前のことを気づかせてもらえて為になりました。(初めての人が遊びながら学ぶためのチュートリアルを作る予定です。) 

    記事は時代劇風の裁判仕立てで面白いと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    個人でも無料でレビュー依頼ができるサイトをこの記事にまとめておこうと思います。
    レビューの依頼をして載ったことがあるものを一覧に追加していきます。50音順に載せていく予定です。
    Android/iOSのどちらかのみ対応の場合は明記しようと思います。

    Appliv
    ユーザーがサイト上にレビューを書いていけるのが特徴的だと思います。
    レビュー依頼はサイト下部にあるリンクからいける専用のフォーマットで行いました。

    オススメのスマホ無料ゲーム
    Twitterのフォロワーだと優先的にレビューをしてくれるようです。とてもありがたいと思います。またフォロワーのアプリのレビューであると明記されているため、「なぜこのアプリを取り上げるの」という不公平感がなくて良いです。しっかり遊んでレビューしてもらっていることがわかる内容で良い点・悪い点を述べていることが役に立つと思います。5段階評価で大体の内容が把握できるのも見やすくて良いです。
    レビュー依頼はTwitterで直接依頼しました。 

    クソ研
    クソゲーをレビューしていくコンセプトのサイトです。クソゲーだけ扱うように見えますが、面白いアプリのレビューもされています。遊んだときのここが駄目というところをおもしろおかしく取り上げているので読み物としても良いし、開発者として意見を参考にするということもできるかと思います。
    レビュー依頼はTwitterで直接依頼しました。 
    (現在は休止されているかもしれません。)

     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unityのビルドを行いAPKファイルを作ります。できたファイルのサイズが大きかった場合どうすればよいでしょうか?
    50MBを超えないようにするだけでなく、より小さいファイルになっている方がダウンロードが早く終わり好ましいです。APKに含まれるアセット(テクスチャ、サウンド、スクリプトなど)を小さくするということがAPKファイルを小さくすることにつながります。
    効果的なのは大きなアセットを削減することです。例えば1MBのテクスチャと1KBのサウンドがAPKに含まれている場合、前者を減らす方が効果があります。容量が1000倍違うので当たり前なんですが、PC上で見れるファイルサイズがAPK内でのファイルサイズと異なるためどのファイル(アセット)を削減すべきなのか調べるのはそれほど簡単ではありません。
    もちろん元々大きなファイルはAPK上でも大きいはずですが、どれくらいの割合を占めているかを知ることはできません。あくまでも元のファイルサイズは目安です。APK上でアセットがどの程度のファイルサイズなのかを知る方法は以下の通りです。(公式に発表されている方法ではなく、私が調べてみて実際に推測通りだと思われる方法になります。) 

    test.apkというようにAPKファイルができているとします。
    拡張子をzipに変えて、解凍します。解凍したら以下のようなフォルダ構成になっているかと思います。(Unityのバージョンによっては多少変わるかも知れません。)
    apkunzip

    assets以外のフォルダは削減することができないので、assets以下にあるリソースのうち容量の大きいものを探します。assets/bin/DataにRESOURCEファイルというものがあります。これはプロジェクトのResourcesフォルダ以下にあるアセットのバイナリだと思われます。
    この中の大きなものを削減すると効率的です。ファイル名がGUIDと一致するため、プロジェクトフォルダ内をgrepすることで元のファイル名を調べることができます。
    シーンに置いているゲームオブジェクト等はシーンの方にまとめられてしまうようで個別にサイズの大小を測ることができません。
    apkres
     
    上の画像で言うと、3番目の1f2c3a...とかいうファイル名がGUIDです。

    かなり手間がかかる方法なのですが、極端に大きなファイルがResourcesにあり、それがアプリを圧迫している場合には有効です。それ以外の場合だとResourcesを使っているときが有効だと思います。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5では2つの種類があります。無料のPersonal Edition有料のProfessional Editionです。
    機能的な差はほぼありません。ゲームを作る上では差がないのですが、ゲーム起動時のスプラッシュスクリーンがUnityのロゴから変更できなかったり、Pro向けのサービスが使えないといった制限がPersonal版にはあります。といってもProfessional版がUnityから受けられるサービスで優遇されるというだけでPersonal版だと全く使えないというわけではないです。後から使えるようになったり、使える範囲が狭かったりするということです。

    pvsp
    どういう差があるか詳しい情報はこちらの公式サイトで説明されています。
    Asset Store Level 11というサービスは良いな~と思いますが、Personalで十分使えるというのが大多数の意見になるのではないでしょうか。

    ゲームを作るのに機能的に変わらないならProfessional版を買うなんてプロを気取った人だけだとお思いかもしれません。
    しかし、そうではなくてPersonal Editionを使うには条件を満たす必要があります。条件を満たさなければ自動的にProfessional Editionを選ぶことになります。(そうなってなかったらUnity作っている会社は儲かりませんし……)
    条件の詳細は「Unity Pro および Unity Personal ソフトウェアライセンス契約 バージョン 5.x」のユーザーが使用可能なバージョン-Unity Personal の収入制限に使用条件が書いてあります。詳細情報は上に載っていますが、FAQにも簡単に書いてあります。
    売り上げと使用者がどういった立場なのかによって条件が決まっています。
    個人または個人事業主なら、Unityを使って得た収入が1年で$10万(約1200万円)を超えた場合はPersonal Editionは使えません。趣味でゲームを作っている人なんかは大抵Personalを使えます。Unityを使って稼いだ額が10万ドルを超えるというのは使い始めではあり得ないし、相当すごいものを作らない限り超えることはないでしょう。
    企業などの法人の場合も額は$10万ですが、資金や予算が$10万を超えたらということなので大抵はProfessional Editionを使うということになります。Unityの使用による利益かどうかは関係ないので、始めからProfessional Editionになるでしょう。
    Personal Editionの使用条件を満たしていてもProfessional Editionを買って使うことは可能です。(どうしてもスプラッシュスクリーンを変えたい人やPro向けのサービスを使ってみたい人は買うことができます。)

    大雑把にいえば、Unity5の使用料は
    個人なら、無料
    それ以外なら、一人当たり$1500以上
    となります。

    Professional Editionの値段は$1500(今だと18万円)で永続ライセンスを買うか月$75(今だと9000円)の料金を払い続ける2通りになります。20カ月以上使うなら永続ライセンスの方が安くなるので、そちらを買うのが良いでしょう。
    iOSやAndroidにアプリを作る場合は$1500では足りません。追加でPro用のアドオンを買わなければなりません。ちなみに値段はProfessional Editionと同額です。つまりiOS/AndroidともにProfessional Editionでアプリを作るには$4500が必要です。

    10万ドルを超える利益を何年にもわたって得たとしてもUnity5の料金としてかかるのは一人当たり$1500です。利益に比例して料金を要求されるのではないため、非常に良心的と言えるでしょう。

    個人開発者としてはProfessional Editionを使わなくてはならないようになりたいものです。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    人月とは1人が1月に行う作業量(工数)のことです。作業量の見積もりでよく使われる言葉です。直感的にわかりやすい単位なので良く使われるのだと思います。
    人月でいう1月は20日間のことであり、1日は8時間の作業を行うとしているのが普通です。1人が1日に行える工数は1人日。1人が1時間に行える工数は1人時となっていきます。
    どれも求め方は(人数)×(時間)で簡単に求められます。速さと時間と距離の関係と同じなので小学生でもわかる計算です。速さが人数、時間は時間、工数が距離となります。
    1日が8時間となったりするところだけが変換をややこしくしますが、難しいのはそれくらいです。

    作業をするのに2人で3日かかるなら、6人日。
    1人で6日作業しても6人日です。

    2人でやった方が効率の良い作業とか個人の能力差とかは考えないので、あくまでも大雑把な見積もりです。見積もる人の能力で人日をはじきだすのがその人には使いやすいですが、他の人には使えないことに注意が必要です。

    自分のスケジュールを決めるのには使える方法だと思いますが、これを元に料金を決めているのはかなりの馬鹿者だと思います。 なぜならこれは作業の量を測るだけの話であって、作業ごとの単価はまるで関係ないことだからです。作業量が多いのだから料金が高いというのなら、受け手は無意味に作業をゆっくり行うでしょう。
    とはいえ、時給という考えが日本には根強く浸透しているため、前述の主張は通ることが少ないのが現実です。特に年を取るほどそのような時間に対して対価を考えがちです。(あくまでも傾向です。年齢を経ても新しいことに理解を示す人もいるでしょう。)
    そうなっている以上は仕方がないので、ちょうど良い時給を決めるだけです。難しいことや簡単なことを入れたうえで平均をとります。
    例えば、難しい作業の場合は時給3千円。 簡単な作業の場合は時給1千円とします。この場合、同じ時間だけ難しい作業と簡単な作業を行えば時給は2千円です。必要な分だけの時給を請求すればいいのです。

    人月は大雑把な費用を出すのには使えます。人月が多ければそれだけ費用は大きくなります。細かい数字を出すために使われていたら、それは疑った方が良いです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Google PlayにアップロードしたAPKファイルが実際に配布されているものと同じなのかと疑問に思ったので調べてみました。

    試した方法はAPKファイルをDeveloper ConsoleにAPKをアップロードした後、そのAPKがGoogle Playからダウンロード可能になった時点でそれを端末にインストールしました。インストールした端末からAPKファイルを取得したものとアップロードしたファイル(PC上に保存しておいたファイル)とバイナリ比較をします。

    結果は同じものでした。

    アップロードしたAPKに何らかの変更がされるかと思っていたのですが、そんなことはありませんでした。リリース用に作ったAPKを端末にインストールして実行すれば、それはリリースしたときの動きと全く同じだということです。

    テスト方法の詳細を書いておきます。
    バイナリ比較にはコマンドプロンプトでcompというコマンドで行いました。 
    端末からAPKファイルを取得するにはファイルのパスを見つけた後、adb pullコマンドを使用してPC上にファイルをコピーします。パスの見つけ方はadb shell pm list packages -fというようにすれば端末にインストールされているアプリが一覧で出力されるので、対象のパッケージ名を見つければ良いです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    11/15に「トランプ・ナポレオン」を2.2にアップデートしました。

    機能追加としてはチャットの対応です。
    前面にチャット用のUIが表示されるため、宣言や副官指定、カード交換時に表示してしまうとそれらのUIの操作ができなくなってしまいます。チャットをしながら遊ぶということを優先したので、このようになっています。
    トリックの最中はチャットUIを表示してもカードの選択に被らないようにしてあるので、チャットをしながらカードを出すということができます。
    tn-chat1 tn-chat2

    チャットは全員にメッセージが送られるようになっています。表示できるメッセージには上限があり、古いものから消えていきます。
    1メッセージは30文字まででメッセージの上限は50個になっています。

    ユーザー的には関係ないですが、広告のメディエーションに対応したというのが開発者としては最も重要なアップデートになります。nendの単価が下がってきていたので、1つの広告に依存するのは良くないと考えメディエーションを行おうかとなりました。
    AdMobのメディエーション機能自体は以前のアプリから対応したいと思い、実験はしていました。しかしnendのAdMobメディエーション用のアダプタにバグがあるようでAscend G6で必ずアプリが終了するということが発生していたため、対応は行いませんでした。この話は6月ごろのことで結構な時間が経っているので、もしかしたら直っているのではないかと思って今回試してみることにしました。
    SDKもアダプタも更新されていたためか問題は起こらずバナーとインタースティシャルのメディエーションを行うことができました。 

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Google Playのカテゴリーで言うとトランプはゲームのカードというカテゴリに属します。主にトランプとトレーディングカードゲームが集まっています。
    カードのカテゴリはそれほど活発ではないという特徴があります。新着無料トップという新しいアプリの中でのランキングがありますが、そこに載っているアプリは50くらいです。
    新着無料のアプリのランキングが少ないということは、新しく作られているアプリの数が少ないということです。新着有料トップというランキングもありますが、この記事を書いているときは1件も登録されていませんでした。つまりカードでは新しい有料のアプリがかなり少ないということです。

    トランプは色々なゲームがありますが、知られているようなゲームはごく一部です。日本では大富豪、ポーカー、7並べ、ババ抜き、神経衰弱、ダウトといったものがよく知られているように思います。これらは基本的に2~7人くらいで遊ぶものです。おそらくは家庭や友達の間で遊ばれるものが好まれているのでしょう。
    こういった人気のあるゲームを題材としたアプリは既にリリースされています。特に大富豪はよく見かけます。大富豪は最も人気が高い気がするし、知っている人も多いと思います。そのため大富豪のアプリはたくさんあるのでしょう。
    実のところトランプのアプリのほとんどは複数人でやるゲームではなく、1人用のゲーム―ソリティアです。特に有名なのがフリーセルとクロンダイクです。パソコンに付属していたりするのでなんとなく知っているかもしれません。暇つぶしとしても良いし、じっくり考えるゲームなのでそういうのが好きな人には良いゲームです。
    ルール自体はそれほどバリエーションがある方ではないので、いくつもアプリが出ても意味がないような気はします。いくつもあるのはそれだけ需要があるということと作りやすいということがあると思います。ソリティアのプレイヤーは当然一人なので、ゲームのルールをきちんと処理すれば作れます。難しいのはルールの処理とUIです。

    ソリティアを作るのが難しいといっても複数人で遊ぶ大富豪や7並べほどは難しくありません。複数人で遊ぶゲームを作るのが難しい最大の原因はAIです。人間であるプレイヤー以外の対戦相手をどのようにプログラミングするかが非常に困難です。強すぎても駄目ですが、弱すぎるよりは強い方が良いです。強い理由が相手のカードを盗み見るといったイカサマでは困ります。イカサマしていると遊んでいる人が感じてしまったら、とたんにつまらなくなってしまうからです。
    自分の手札や相手のカードの出し方、今までの流れといったことから判断してAIを作る必要があります。これがどうして難しいかというのは、どんな状況に対しても判断をしなければいけなくてしかも強いということが求められるからです。(一番簡単なのは出せるカードをランダムで出すという方法です。)
    自分が大富豪をやっていることを想像してみてください。自分が出すカードをどうしてそう選んだのかを論理的に説明できるでしょうか?どっちでもいいやという場面もあるでしょうけど、AIがどっちでもいいやというように結論づけるまではどういったことから判断すればいいでしょう?
    トランプのAIとは、ゲームのルールの知らない人にマニュアルを渡して、その通りに遊んだら勝てるようなっているマニュアルを作ることです。

    ソリティアがいっぱいあるのは人気だからということと作るのが比較的簡単だからだと思います。

    複数人で遊ぶゲームにも需要があるのは間違いないので、作ればそれなりに遊ばれるはずです。
    ゲームを作りたいけれど、アイディアがない。でもプログラミングはそこそこできるという人はトランプゲームを作るというのが向いているのではないでしょうか。素材の用意もカードの絵くらいで十分なので、非常に楽です。

    私は今後トランプのアプリをいろいろ作っていくのも良いと思っています。 

    このページのトップヘ