【Unity/C#】1日1回の判定を行う(ログインボーナス、リワード広告などに活用)

はじめに

最近ゲーム内でリワード広告視聴時にに1日1回限定で多くの特典が付与される処理を実装しました。その際の1日1回の判定部分の処理内容を紹介します。

ソースコード

// 最新のCM視聴日付
public static string latestCmView;

/// <summary>
/// CMを本日視聴したかを返す
/// </summary>
/// <returns>true:本日視聴済み, false:未視聴</returns>
public static bool isViewCmToday()
{
    string today = DateTimeString(System.DateTime.Now);

    if(today == latestCmView)
    {
         return true;
    }
    else
    {
        return false;
    }
}

/// <summary>
/// DateTime変数をYYYY/MM/DD形式で返す(0は省略:例.2021/1/1)
/// </summary>
/// <returns>日付文字列</returns>
public static string DateTimeString(DateTime date)
{
    return date.Year.ToString() + "/" + date.Month.ToString() + "/" + date.Day.ToString(); 
}

判定をする手順は以下のようになります。

  1. 動画視聴時に日付文字列(YYYY/MM/DD)を latestCmView に登録(※1)
  2. 現在日付文字列とlatestCmViewを比較し、一致の場合は視聴済み、不一致の場合は未視聴

※1: 動画視聴完了時にlatestCmViewに視聴した日付文字列を登録しています。

latestCmView = DateTimeString(System.DateTime.Now)

この判定方法だと深夜0時を過ぎた段階で未視聴判定となります。ゲームではログイン判定が4時,5時頃に設定されていることも多いので、その場合には DateTime.Add で判定日付をずらすことで対応ができそうです。

おわりに

今回は1日1回の判定処理を紹介しました。私自身、リワード広告で1日1回限定で特典を付与する処理を実装しましたが、ログインボーナスの付与やデイリーミッションにも使用できそうだと感じました。

ただ、何かしらの間違いで重複付与してしまったりすると問題なので、ソーシャルゲームなどの運用の場合は付与したフラグなどをつける必要があるかもしれません。