Unity Зарабатывайте монеты, пока приложение закрыто
Код ниже: в настоящее время является частью void awake(), где инструкция if устанавливает все значения playerPrefs для первого воспроизведения. Приведенный ниже оператор пытается определить, сколько монет будет заработано, когда игрок снова откроет приложение.
Как исправить: как сделать так, чтобы он запускал этот код только при повторном открытии приложения? Не каждый раз, когда сцена перезагружается.
Возможные улучшения: Если вы видите более простой способ сделать приведенный ниже код, чтобы избежать мошенничества, я открыт для предложений. Я хочу получить не более 24 часов бонусных монет или, если они открыты менее чем, дают монеты равной ценности.
else
{
// Player Restart Game
// Check Time for coin bonus
ButtonCanvas.gameObject.SetActive(false);
OfflineCanvas.gameObject.SetActive(true);
// Same Year
if (PlayerPrefs.GetInt("year").Equals(System.DateTime.Now.Year))
{
// Same Month
if (PlayerPrefs.GetInt("month").Equals(System.DateTime.Now.Month))
{
// Same Day
if(PlayerPrefs.GetInt("day").Equals(System.DateTime.Now.Day))
{
// Add Coin Bouns for hours/min passed
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (((System.DateTime.Now.Hour - PlayerPrefs.GetInt("timeHour")) * 60) + (System.DateTime.Now.Minute - PlayerPrefs.GetInt("timeMin")));
}
else // Different Day
{
// Update if new day is higher than old
if (PlayerPrefs.GetInt("day") < System.DateTime.Now.Month)
{
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
}
else // Different Month
{
// Update if new month is higher than old
if (PlayerPrefs.GetInt("month") < System.DateTime.Now.Month)
{
PlayerPrefs.SetInt("month", System.DateTime.Now.Year);
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
}
else // Different Year
{
// Update if new year is higher than old
if (PlayerPrefs.GetInt("year") < System.DateTime.Now.Year){
PlayerPrefs.SetInt("year", System.DateTime.Now.Year);
PlayerPrefs.SetInt("month", System.DateTime.Now.Year);
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
}
2 ответа
Способ сделать это - использовать OnApplicationfoucs() OnApplicationPause() OnApplicationClose()
Пытаться:
static bool IsCalled;
else{ //Player Restart Game
//////
/// Check Time for coin bonus
//////
if (!IsCalled)
{
ButtonCanvas.gameObject.SetActive(false);
OfflineCanvas.gameObject.SetActive(true);
if(PlayerPrefs.GetInt("year").Equals(System.DateTime.Now.Year)){ // Same Year
if(PlayerPrefs.GetInt("month").Equals(System.DateTime.Now.Month)){ // Same Month
if(PlayerPrefs.GetInt("day").Equals(System.DateTime.Now.Day)){ // Same Day
// Add Coin Bouns for hours/min passed
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (((System.DateTime.Now.Hour - PlayerPrefs.GetInt("timeHour")) * 60) + (System.DateTime.Now.Minute - PlayerPrefs.GetInt("timeMin")));
} else { // Different Day
// Update if new day is higher than old
if (PlayerPrefs.GetInt("day") < System.DateTime.Now.Month)
{
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
} else { // Different Month
// Update if new month is higher than old
if (PlayerPrefs.GetInt("month") < System.DateTime.Now.Month)
{
PlayerPrefs.SetInt("month", System.DateTime.Now.Year);
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
} else { // Different Year
// Update if new year is higher than old
if(PlayerPrefs.GetInt("year") < System.DateTime.Now.Year){
PlayerPrefs.SetInt("year", System.DateTime.Now.Year);
PlayerPrefs.SetInt("month", System.DateTime.Now.Year);
PlayerPrefs.SetInt("day", System.DateTime.Now.Year);
PlayerPrefs.SetInt("timeHour", System.DateTime.Now.Hour);
PlayerPrefs.SetInt("timeMin", System.DateTime.Now.Minute);
// Add Coin Bonus For Time 24 hrs
offlineCoinCount = PlayerPrefs.GetInt("OfflineCoinsVal") * (24 * 60);
}
}
IsCalled = true;
}
}
Логическое значение останется неизменным, пока игра не будет сброшена.