FreelyApps

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


    ブログを
    https://freelyapps.net/
    に移転する予定です。
    リンク切れがある記事はこちらに移動した可能性もあります。

    カテゴリ:Unity > Unity Analytics

      このエントリーをはてなブックマークに追加 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
    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
    正確なことはわかりませんが、おそらくは4月中旬くらいにUnityAnalyticsの管理サイトが更新されました。(UNITEの後で変わったのではないかと思います。UNITEで新機能など発表→いろいろ更新という流れ。)

    EVENT MANAGERという項目が以前と大分変わりました。それ以外は見た目が少し変わっていますが、機能的には大きくは変わってないと思います。以前の記事のスクリーンショットを見たら、EVENT WATCHERというものだったようです。名前も変わっているようです。

    EVENT MANAGERはこんな感じです。
     analytics-em-ts

    カスタムイベントのポイントの上限が1000から5000へと増えました。多くなったことでよりたくさんのカスタムイベントを作っても記録されるようになり、色々解析できるようになります。普通に使う分では1000でも多いので、増やす必要があるのかと思います。
    しかし、今後ヒートマップという新機能が作られるのでそのためなのかもしれません。これがどれくらいポイントを消費するの不明であり多くのポイントを消費しそうなのです。(位置情報を文字列にして、これをパラメータとして持つカスタムイベントを作れば現時点でもヒートマップに似たようなものを実装できます。位置情報の空間分解能によりますが、1mの立方体で10mの立方体の空間を覆うなら1000個の区別がされます。これだとポイントの消費が大きすぎて実用的ではないです。)

    カスタムイベントの消費ポイントが以前と異なるようです。
    以前は0か1個のパラメータを持つ場合の消費ポイントは1でした。今回からはカスタムイベント1つにつきまず1消費します。そしてパラメータごとに1ずつ消費ポイントが増えていくようです。文字列の場合は送る取りうる値の数だけポイントを消費することは以前と変わらないようです。
    消費するポイントは、カスタムイベントの分1と取りうる値の数分(数値のみパラメータの個数分)です。

    analytics-em-ts-custom
    EVENT MANAGERではカスタムイベントごとにどのようにポイントを消費しているか見れます。これで簡単に内訳が分かるようになりました。(やったね!超便利。) 
    またカスタムイベントの有効、無効が選択できるようになります。新しい実行ファイルでは使わなくなったカスタムイベントがある場合などはDisabledにするとよいでしょう。無効化してあるとポイントの消費が0になりますが、データの参照などそのカスタムイベントはアナリティクスでは全く使えなくなります。
    Disabledにしても後でEnabledにして復活することはできます。無効にしていた間のデータは存在しませんが、Enabledにしたときから集計が行われます。

     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    Unity Analyticsの管理サイトでDATA EXPLORERを選ぶと、カスタムイベントの情報を見ることができます。

    下の図は、ナポレオンを1ゲームするときに呼び出しているカスタムイベントのグラフです。個のイベントを呼んだユーザー数の変化が表されています。(本来は左端にユーザー数が表示されますが、ここでは消してあります。)
    tn-analytics-1page

    これだけだとアプリを起動した人数とほぼ一致するはずです。なぜなら、このアプリを起動して遊ばずに抜けることはほぼないと思われるためです。DAUと比較してどれくらいの人が何もせずにアプリを落とすのかを知りたいときには役立つと思います。

    カスタムイベントが呼ばれた回数を知りたいことがあります。ユーザーごとではなく、各々のユーザーが呼び出したカスタムイベントの総量です。
    これの見方についての説明は載っていないのですが、おそらく以下で説明する方法で見れると思います。(正しいやり方かの保証はないのでご注意ください。)

    Add Custom Eventで見たいイベントを追加するなりして、特定のカスタムイベントを選んだら、対象となるユーザーを選び、View Parametersボタンを押します。
    そうすると2枚目のページにいけます。このページはあるカスタムイベントの詳細を見れる画面です。ここでパラメータの指定をunity.nameにします。どうもこれはカスタムイベント名を表しているようです。countというのは数字型のパラメータを指定したときの呼び出し回数です。つまりこれが発生回数になります。
    (本来は左端に回数が表示されますが、ここでは消してあります。)
    tn-analytics-2page

    何回か検証したところカスタムイベントの発生回数と一致したので、この方法で発生回数を調べられます。
     

      このエントリーをはてなブックマークに追加 Clip to Evernote
    結構前の話ですが、5.2以降でも通じる話なので書いておこうと思います。

    Unity5.1においてUnity AnalyticsがUnity内部に組み込まれました。これによりアセットストアからSDKを落としてきて組み込むといった手間はなくなり、使いやすくなりました。Project IDというものをWebサイトから取得し、PlayerSettingsで設定するという方法でUnity Analyticsが有効になったと思います。(この記事を見ると、現在は5.1のProject IDはあまり推奨されていないみたいです。またしても5.1ではSDK方式でも対応できるようになっています。)

    Unity5.2以降もUnity AnalyticsがUnity内部に組み込まれているため、SDKは不要です。サービスウィンドウができたため、ここでUnity Analyticsの有効にすることができます。サービスウィンドウに色々なサービスがまとめられたため、やり方が変わったのが5.2です。つまり、使い方が変わっただけで5.1から進歩していません。(内部的には変わっているかもしれませんが……)

    サービスウィンドウを開くと下のようになっています。Unityアカウントにログインしないと何もできないということです。
    sw-start

    ログインすると、新しくProject IDを作るか既にあるIDをリンクするかを選ぶことができます。既にProject IDがあるというのは、古いバージョンのUnityでAnalyticsを使っていたとか、管理サイト上でProject IDを取得したということが考えられます。そのような場合はそのIDを設定すれば良いです。
    sw-start-after-login
     
    Project IDも新しく作る場合(新しいプロジェクトならそのはず)はUnityアカウントの所属する組織を選びます。Select organizationにリストが出るので、適当なものを選びます。そうするとCreateボタンが押せるようになるので押してください。
     
    新しくProject IDが生成され、ウィンドウにProduct Nameが表示されるようになりました。Analytics以外のサービスも設定できますが、今回はAnalyticsのボタンを押して有効にします。
    sw-projectid-created
     
    後は画面に沿ってEnable Analyticsボタンを押すか右上の有効・無効切り替えのトグルを押します。有効化するときに年齢制限の確認が聞かれます。(これはアメリカの法律でCOPPAというものに対応するためのものです。13歳未満の子供の個人情報を収集する際に制限があります。13歳未満対象かどうかをUnityが知るためアプリごととに設定することを求められているのでしょう。)詳細についてはここを見ると良いです。

    以上で設定は終了です。サービスウィンドウ上でもAnalyticsがONになっていることを確認できます。
    この設定が終わったら一度はEditor上で起動しておいてください。これによりPCから管理サイトにAnalyticsの情報を送ります。管理サイト上にValidateチェック用のページがあるので、それを見るとすぐに正しく接続できたかがわかるようになっています。ここらへんは以前と同じです。
    カスタムイベントの集積には最長6時間程度かかるそうなので、6時間待ってからチェックすれば良いです。


    最後に注意点を書いておきます。かなり重要なので、覚えておくとたぶん役に立つでしょう。

    Analytics.CustomEventメソッドはUnity Analyticsが有効にされていないと、「The name `Analytics' does not exist in the current context」というエラーが発生します。
    カスタムイベントのメソッドがエラーを起こすため、自分でカスタムイベントをラップして呼び出しておくのがお勧めです。

    Unityを閉じると、サービスウィンドウで設定したはずのProject IDのリンクが解除されています。内部的にはProjectSettings.assetにProject IDが保存されているためリンクされていますが、ウィンドウ上では新たにはじめる状態が表示されていてIDがなくなってしまったのかと勘違いします。
    ここでCreateしてしまうと新たにIDが増えていくので、「I already have a Unity Project ID」 を選んでリンクするのが通常の使い方だと思います。設定を変えなければ開くことはないかもしれませんが、これは結構驚く挙動です。

    このページのトップヘ