FreelyApps

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


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

      このエントリーをはてなブックマークに追加 Clip to Evernote
    iOSアプリ配布への道のり」に書いたようにMacBookが手に入り、iOSのアプリのリリースへ向けて動き出したところです。

    まずは最も新しいAndroidアプリであるトランプ・アメリカンページワンを移植することにしました。これはUnityのバージョンが新しいということでアップデートによる影響が少ないためです。
    Macにプロジェクトを持って行って、ビルドするとUnityエディター上では普通に動きました。これこそがUnityの大きな利点なわけですが、問題が起きずにそのまま動いたのですごいと思いました。UNITY_ANDROIDの定義によるところを少し直したくらいです。
    iOSのビルドでは2段階を踏みます。UnityでのビルドではXcodeのプロジェクトが作られます。この先はXcode上でビルドをしてアプリを実機にインストールするというようになります。iOSのアプリはすべてXcode上で作らなければならないということです。(Androidではここら辺が自動で行われ、APKが得られるので楽なんですが。)

    Xcode 7からはApple Developer Program(AppStoreにアプリを配信するには契約が必要)に参加しなくても実機にアプリをインストールできました。とりあえずアプリが作れるのか試すという意味では無料であるというのは良いです。実機の方でアプリを信頼するかという質問に答えれば使えるようになりました。
    Apple Developer Programを契約するとアプリの作成時の署名等が変わります。このあたりが過去の情報だとかなり大変だというかわかりづらいそうですが、現在はすべてXcodeがFix Issueと割と自動で直してくれます。

    「AdMobの対応の情報で正しいものがどれなのか?」ということが一番迷いました。色々な方が問題に遭っているようで自分が遭遇したものを順番につぶしていくしかない感じです。AdMobのUnity向けのプラグインを使っているのですが、Google Mobile Ads SDKをiOSでは追加する必要があります。Unityのプロジェクトに入れたほうが楽ですが、Xcode上で後から追加しても良いようです。このSDKをWindowsでダウンロードしたものを使うとなぜか駄目でMacでこのSDKをダウンロードしないとうまくいきませんでした。
    まあそういうものらしいですが、納得いかないですね。

    トランプ・アメリカンページワンをiOSに移植がほぼ完了したので、予約を受け付けることにしました。 
    他のAndroidアプリも順番に移植を進めていきます。 一つ完成させられれば、あとはそれに倣っていくだけです。

      このエントリーをはてなブックマークに追加 Clip to Evernote
    アプリをAndroid/iOSで出そうとすると、Google PlayとApp Storeに置くことになります。このアプリへのリンクをSNSなどでシェアするというのは、宣伝にもなるのでよく行われています。

    アプリへのURLは以下のように
    https://play.google.com/store/apps/details?id=com.FreelyApps.Game.Trump.AmericanPageOne」 
    とても長くなります。 
    これをTwitterなどに載せてしまうと、かなり文字数を圧迫してしまいます。リンクをそのまま含めるとTwitterではその先のページの情報を載せてくれるようで利点もあります。しかしながら、文字数を使いすぎて本文が足りなくなってしまうし、 Android/iOSの両方のリンクを載せるのは相当厳しいです。(ほぼリンクだけになってしまうので。)

    Google URL ShortenerのようにURLを短くするサービスを使うと、なんとか載せることができるようになります。短くしたURLをAndroid/iOSの2つ分載せるというのが多いと思います。この方法は簡単ですが、あまりよくないと思います。リンク先の情報がわかりにくいこととユーザーがどちらかのリンクを選ぶ必要があるからです。

    AppStoreかGooglePlayに振り分けてリダイレクトする方法」 Sawalogより
    で紹介されているユーザーをあるHTMLファイルへ行かせ、そこのJavaScriptでリダイレクトさせるというのが良い方法だと思います。この方法であれば、リンクは一つになりユーザーが意識しなくても自分にあったページへと行くことができます。このHTMLファイルを置くところは公開されたサーバー上ならどこでも良いでしょうけど、その場所を用意することと、HTMLファイルを編集しなくてはならないことが少し欠点でしょうか。

    私の場合はリダイレクト用のHTMLファイルをこのブログのファイル置き場に置き、そのURLを短縮して使おうと考えています。ファイルを置き換えてもURLが変わらなければ問題ないので、途中でリダイレクト先を変えることも問題なさそうです。

    このURLはGoogle PlayとApp Storeへのリンクとして使う予定です。(この記事を書いているときはGoogle Playへしか行きませんが)

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity5.4以前ではAnalyticsのメソッドには以下の
    public static AnalyticsResult CustomEvent(string customEventName, IDictionary<string, object> eventData);
    という形式でカスタムイベントが発生したことを伝えていました。
    この形式しかなかったので、カスタムイベントに付随するパラメータがない場合は、eventDataにnullを渡し
    Analytics.CustomEvent("something" , null);
    というようにしていました。
    見た目からしてもnullを置くのは変な感じですが、これでうまくいっていたのです。 

    Unity5.4.0f3にしたところ、パラメータなしのカスタムイベントでエラーが発生しました。(NullReferenceExceptionが発生するので、とても危険です。Unityはこのエラーが発生しても落ちないのですが、ふつうは落ちます。なぜか処理が一部飛ばされて動き続けるようです。)
    ce_nre


    5.4では、Analyticsクラスに以下の2つのカスタムイベント用のメソッドが追加されています。
    public static AnalyticsResult CustomEvent(string customEventName); 
    public static AnalyticsResult CustomEvent(string customEventName, Vector3 position); 
    パラメータなしのカスタムイベントは上の引数が1つだけのものを呼び出すとエラーがなくなりました。おそらくこの対応で問題ないと思います。
    下の位置を渡すものはヒートマップに使うと思われます。 

    • カテゴリ:
      このエントリーをはてなブックマークに追加 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でもやって落ち着け」と言いましょう。遊ぶ方が楽しいですから。

    このページのトップヘ