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;
}
}

Логическое значение останется неизменным, пока игра не будет сброшена.

Другие вопросы по тегам