見出し画像

UnityでGoogle Analyticsを使う

Unityには公式でUnity Analyticsが用意されていますが、Google Analyticsを使うことでリアルタイムでより様々な情報を解析・視覚化することができます。

ここではGoogle AnalyticsのMeasurement Protocolを使ってユーザによる操作(イベント)を取得する方法を解説します。

Measurement Protocol

UnityからGoogle Analyticsを利用するためにGoogleからプラグインが提供されていますが、このプラグインはiOS/Android向けとなっています。WindowsデスクトップゲームやUnityエディタ上でも動作はするようですが、あくまでも開発時でのデバッグ利用が想定されており、プラグイン自体もベータ版であることから、プロダクトとしてリリースしたゲームやアプリケーションへの使用は若干ためらってしまいます。

そこでGoogle Analyticsにはあらゆる環境でのユーザ操作を測定するための手段としてMeasurement Protocolが用意されており、HTTPリクエストで利用状況をトラッキングすることが可能になっています。

HTTPリクエストであれば、UnityのUnityWebRequestが使えるのでプラグインを使用せずとも簡単に実装することができます。

コード

以下のスクリプトを作成して適当なゲームオブジェクトにアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System.Text;

public class GoogleAnalytics : MonoBehaviour
{
   private const string host = "https://www.google-analytics.com/collect?";
   private const string version = "1";
   private const string hit = "event";
   private const string trackId = "UA-XXXXXXXXX-1";
   private const string clientId = "1234";
   private string eventCategory = "test";
   private string eventAction = "click";
   private const string sessionCtrl = "start";

   public void OnClick() {
       StartCoroutine(PostData());
   }

   private IEnumerator PostData() {

       StringBuilder url = new StringBuilder();
       url.Append(host);
       url.Append("v=" + version);
       url.Append("&t=" + hit);
       url.Append("&tid=" + trackId);
       url.Append("&cid=" + clientId);
       url.Append("&ec=" + eventCategory);
       url.Append("&ea=" + eventAction);
       url.Append("&sc=" + sessionCtrl);

       UnityWebRequest request = UnityWebRequest.Post(url.ToString(), new List<IMultipartFormSection>());
       request.SetRequestHeader("User-Agent", "Unity " + Application.unityVersion);

       yield return request.SendWebRequest();

       if (request.isNetworkError || request.isHttpError) {
           Debug.Log(request.error);
       } else {
           Debug.Log("Response code: " + request.responseCode);
       }
   }
}

内容としてはOnClickをボタンクリックやゲーム内イベントから呼び出すと実行することができます。trackIdの値(UA-XXXXXXXXX-1)はGoogle Analyticsのプロパティ設定のトラッキングIDの値に書き換えてください。

コメント-2020-08-28-215425

コメント-2020-08-29-093506

実行

上記のコードを実行したらGoogle Analyticsのダッシュボードのページでクリックイベントがリアルタイムでトラッキングできていることが確認できます。

コメント 2020-08-29 114546

コードとパラメータ補足

内容としてはヒットイベントとしてイベントのカテゴリ、イベントアクションを指定して様々なイベントのトラッキングを行うことができます。カスタムディメンションを追加することで、イベント回数だけでなく任意のキーと値をセットで送ることも可能です。

また、コード内ではscパラメータを付けてセッションのコントロールを行っています。sc=startとすることで、その都度ヒット単位で新しいセッションとして計測されます。なぜそうしているかというと、1セッション500ヒットの制限がGoogle Analyticsに設けられているからです。

デフォルトの設定では30分何も操作がなければセッションはクリアされます。そうすると例えば20分間隔で100ヒットの操作があるとセッションは途切れずに1つのセッションとして計測され、100分後には上限の500回に到達し、以降のヒットはカウントされなくなってしまいます。

そこでヒットの度にセッションを新しくすることでこの制限を回避しています。ユーザはclientIdで固定にしているため、今度はユーザあたり1日20万ヒットの制限が生じますが、この値であれば実際の利用に支障は生じないでしょう。

Measurement Protocolのパラメータについてはリファレンスが用意されているので一度目を通しておくと良いかもしれません。

また、UnityWebRequestではリクエストヘッダに自動でUser-Agent付加されますが、デフォルトの設定だとなぜかGoogle Analytics側が受け付けてくれないためコード内で設定するようにしています。

まとめ

Measurement Protocolを使ってUnityからGoogle Analyticsへトラッキングができるようになりました。UnityWebRequestを使って通信するため、プラットフォームはiOS / Android / Windows / Mac / Editor問わず動作するので気軽に使うことができます。(WebGLはCORSの制限なのか動作確認できませんでした)

こちらでも同じ仕組みでUnityでGoogle Analyticsを使っているようなので使ってみたり参考にしてみると良いかもしれません。

さらに、Googleデータポータルを使うとGoogle Anayalyticsと連携してより分かりやすくデータを視覚化できるので、これらを活用してUnity自作ゲームの改善に役立ててみてください。🌱

この記事が気に入ったらサポートをしてみませんか?