Search code examples
c#unity-game-enginetimerunity3d-editor

I have a Unity game that's only playable once per day. How can I display a real time countdown until 12 (midnight) when the game is playable again?


To get the real date/time I'm using:

currentDate.text = DateTime.Now.ToShortDateString();

I'm also using playerprefs to determine if the player has played already that day:

    {
        return PlayerPrefs.HasKey(LastPlayed) &&
               FromBase64(PlayerPrefs.GetString(LastPlayed)).Equals(DateTime.Now.ToString(DateFormat));

       // Debug.Log("PLayed");
    }

    public static void SetPlayedToday()
    {
        PlayerPrefs.SetString(LastPlayed, ToBase64(DateTime.Now.ToString(DateFormat)));
    }

    private static string ToBase64(string value)
    {
        return Convert.ToBase64String(Encoding.UTF8.GetBytes(value));
    }

    private static string FromBase64(string value)
    {
        return Encoding.UTF8.GetString(Convert.FromBase64String(value));
    }
}

I'd like to show a real time countdown timer counting toward midnight when the game is playable again. Any ideas how to achieve this in Unity?


Solution

  • To get the time that is missing until the next day you can take the current

    DateTime now = DateTime.Now;
    

    then get the next day but without any hours or minutes etc:

    DateTime nextDay = new DateTime(now.Year, now.Month, now.Day + 1);
    

    and now you an get the difference between both:

    TimeSpan remaining = nextDay - now;
    Debug.Log($"Time until midnight {remaining}");