【问题标题】:Problem With Saving PlayerPrefs On Exit Application在退出应用程序上保存 PlayerPrefs 的问题
【发布时间】:2020-07-14 19:19:52
【问题描述】:

我有一个脚本,其中 4 小时后,奖励级别被解锁。它在统一编辑器中工作正常,但在构建的 android 上不起作用。我想 OnApplicationQuit() 可能有问题,但我尝试了 OnApplicationPause()OnApplicationFocus() 但它们都没有奏效!我真的不知道该怎么办!这是我的脚本;

     using UnityEngine;
     using System.Collections;
     using System;
     using System.Globalization;
     
     public class Date : MonoBehaviour
     {
     DateTime currentDate;
     DateTime oldDate;
     public static bool bonus;

     void Start()
 {
     currentDate = System.DateTime.Now;

     var oldTimeString = PlayerPrefs.GetString("sysString", "10");

     if(!string.IsNullOrWhiteSpace(oldTimeString))
     {
         
         if(long.TryParse(oldTimeString, out var temp))
         {
             var oldDate = DateTime.FromBinary(temp);
             var difference = currentDate.Subtract(oldDate);
             if(difference.Hours>4)
             {
                 bonus=true;
             }
         }
     }
 }
      void OnApplicationPause(bool pauseStatus)
     {
        if(pauseStatus){
             PlayerPrefs.SetString("sysString", System.DateTime.Now.ToBinary().ToString());
             PlayerPrefs.Save();
        }

     }
 
 }

【问题讨论】:

  • 这不是 C 代码。请检查您的标签。
  • 你是为IOS平台构建的吗?
  • 不,它适用于 Android
  • 这也不是unityscript,它是一种已弃用以前在 Unity 中使用的类似 JavaScript 风格的语言……它早就被 c# 取代了

标签: c# unity3d


【解决方案1】:

Application.runInBackground = false; 添加到Awake 方法或Start 方法的开头并使用difference.TotalHours 而不是Hours。后者只会返回日期时间的小时部分。

【讨论】:

  • 谢谢你!是我的错!一个场景中有两个 OnApplicationQuit() ,这就是问题所在,但是您对使用 TotalHours 的建议真的很有帮助!还有一件事;这种机制是基于玩家退出游戏的时间,所以每次他开始游戏时,差异都会重新开始。有没有办法根据奖金级别而不是 OnApplicationQuit() 来设置它?
  • 我没有得到这个问题。您希望在玩完最后一个奖励关卡 4 小时后解锁奖励关卡吗?
  • 没错!是否可以通过更改此脚本或我应该编写一个新脚本?
  • 好吧,在他们每次玩奖励关卡时使用OnApplicationPause 中的脚本来节省时间,而不是在他们关闭游戏时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
  • 1970-01-01
相关资源
最近更新 更多