PR

【Unity】Firebaseを入れて分析してみよう!その3 実践編

Unity

今回はこれまでセッティングしたFirebaseを使って実際に計測していきます。
私自身のゲームアプリで利用した方法をベースにログの取り方を紹介していきたいと思いますのでログをどのように取るべきかお悩みの方などの参考になれば幸いです。

前回の記事

これまでの記事はこちらです。

 

Unityにログ用クラスを用意する

まずアプリ側でログを取るタイミング(ゲームクリア、ゲームオーバーなど)に応じたイベント通知処理を呼び出す必要があります。

そこで今回は開発中のアプリで実際利用した処理を流用して説明をしていこうと思います。

 

ゲームアプリ「妖言」の概要

下記リンクで内容を知っておくとイメージしやすいかもしれません。

 

実際のプログラム

実際アプリで実行しているスクリプトはこんな感じです。
解説は一つずつしていきますので、ザラッとみる感じでオーケーです。

クラス名は「AnalyticsManager 」で計測系をまとめて行うクラスというイメージです。

using System.Collections.Generic;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using Firebase.Analytics;

public class AnalyticsManager : MonoBehaviour
{
    // シングルトン処理
    private static AnalyticsManager instance;
    public static AnalyticsManager Instance
    {
        get{
            if (instance == null) {
                Type t = typeof(AnalyticsManager);

                instance = (AnalyticsManager)FindObjectOfType (t);
                if (instance == null) {
                    Debug.LogError (t + " をアタッチしているGameObjectはありません");
                }
            }
            return instance;
        }
    }

    // クエスト終了タイプ
    public enum QuestEndType
    {
        Clear,
        GameOver,
        MenuQuit,
        AppQuit,
    }

    // イベント:クエストクリアをシェアしたか
    const string EVENT_SHARE_QUEST_CLEAR = "share_quest_clear";

    // イベント:クエスト開始&終了
    const string EVENT_QUEST_START = "quest_start";
    const string EVENT_QUEST_END = "quest_end";

    // イベント:広告リワードを取得したか
    const string EVENT_AD_REWARD_GET    = "ad_reward_get";

    // イベント:広告リワードをキャンセルしたか
    const string EVENT_AD_REWARD_CANCEL = "ad_reward_cancel";

    // パラメータ:
    const string PARAM_QUEST_NAME = "name";
    const string PARAM_QUEST_END_TYPE = "end_type";
    const string PARAM_QUEST_ELAPSED_TIME_SEC = "elapsed_time_sec";


    // 正常に初期化できたか
    bool m_valid = false;
    bool IsValid{ get{ return m_valid; }}
    bool IsInvalid{ get{ return !m_valid; }}


    void Awake()
    {
        // Firebase初期化
        Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
                var dependencyStatus = task.Result;
                if (dependencyStatus == Firebase.DependencyStatus.Available) {
                    // Create and hold a reference to your FirebaseApp,
                    // where app is a Firebase.FirebaseApp property of your application class.
                    //   app = Firebase.FirebaseApp.DefaultInstance;
 
                    // Set a flag here to indicate whether Firebase is ready to use by your app.
                    m_valid = true;
                    FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventAppOpen);
                }
                else
                {
                    UnityEngine.Debug.LogError(System.String.Format(
                        "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
                    // Firebase Unity SDK is not safe to use here.
                }
            }
        );

        DontDestroyOnLoad(gameObject);
    }


    // ログ:クエスト開始
    public void LogStartQuest( string questName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_QUEST_START, PARAM_QUEST_NAME, questName );
    }

    // ログ:クエスト終了
    public void LogEndQuest( string questName, QuestEndType endType, int elapsedTimeInSec )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_QUEST_END, new Parameter[] {
            new Parameter( PARAM_QUEST_NAME, questName),
            new Parameter( PARAM_QUEST_END_TYPE, endType.ToString() ),
            new Parameter( PARAM_QUEST_ELAPSED_TIME_SEC, elapsedTimeInSec),
        });
    }

    // ログ:クエストクリアをシェア
    public void LogShareQuestClear()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_SHARE_QUEST_CLEAR );
    }

    // ログ:広告報酬ゲット
    public void LogAdRewardGet()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_AD_REWARD_GET );
    }

    // ログ:広告キャンセル
    public void LogAdRewardCancel()
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( EVENT_AD_REWARD_CANCEL );
    }

    // ログ:シーン開始
    public void LogStartScene( string sceneName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventLevelStart, FirebaseAnalytics.ParameterLevelName, sceneName );
    }

    // ログ:シーン終了
    public void LogEndScene( string sceneName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.LogEvent( FirebaseAnalytics.EventLevelEnd, FirebaseAnalytics.ParameterLevelName, sceneName );
    }

    // ログ:スクリーン設定
    public void SetScreeen( string screenName )
    {
        if (IsInvalid){
            return;
        }
        FirebaseAnalytics.SetCurrentScreen( screenName,  null);
    }
}


 

コメント

スポンサーリンク
タイトルとURLをコピーしました