読者です 読者をやめる 読者になる 読者になる

スマゲ

スマートなゲームづくりを目指して日々精進

Unityでゲームの停止時間を取得する

Unityで前回ゲームをプレイしてから次に起動するまでの時間を取得します

■利用用途
放置系のゲームでゲームの放置時間に応じてアイテムを付与する

■現在のUnix時間を取得する
Unityで時間を扱う - スマゲよりDateTimeからUnix時間を求める関数を使う

TimeUtil.GetUnixTime(System.DateTime.Now);

■Unix時間を保存/取得する
UnityのPlayerPrefsを利用する

private void saveTime(){
    PlayerPrefs.SetString(ResumeKey, TimeUtil.GetUnixTime(System.DateTime.Now).ToString());
}

private long getResumeTime(){
    var lastPlayTime = long.Parse(PlayerPrefs.GetString(ResumeKey, "-1"));
    return lastPlayTime == -1 ? 0 : TimeUtil.GetUnixTime(System.DateTime.Now) - lastPlayTime;
}

■適切なタイミングで保存呼び出しを行う
保存タイミング: ゲーム終了時、ゲーム一時停止時
取得タイミング: ゲーム起動時、ゲーム一時停止復帰時

void Start(){
    Debug.Log(getResumeTime());
}

void OnApplicationPause(bool pauseStatus) {
    if(pauseStatus){
        saveTime();
    } else {
        Debug.Log(getResumeTime());
    }
}

void OnApplicationQuit(){
    saveTime();
}

■まとめ
このこの方法で取得する時間は端末の時間をいじると簡単に水増しできるので、実際に運用するときはある一定値を超えたら丸めるのが良さそう