Unity在应用程序关闭时赚取硬币



下面的代码:当前是void awake((的一部分,if语句在其中为首次播放设置所有playerPrefs值。下面的else语句试图实现玩家重新打开应用程序时将获得多少硬币。

如何修复:如何使其仅在重新打开应用程序时运行此代码?并非每次都重新加载场景。

可能的改进:如果您看到了一种更简单的方法来完成以下代码以防止时间作弊,我愿意接受建议。我只想要最多24小时的奖励硬币,或者如果在低于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);
}
}
}

尝试:

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

布尔值将保持不变,直到游戏重置。

实现这一点的方法是使用OnApplicationfoucs((OnApplicationPause((OnApplication Close((

最新更新