Unity定期设置PlayerPrefs数据

时间:2017-04-12 02:17:39

标签: c# unity3d coroutine

我正在使用PlayerPerfabs存储玩家数据,例如玩家已经解锁的等级以及游戏中获得的点数,我希望在游戏过程中定期更新PlayerPerfabs数据(比如每5秒),所以我做了一个名为ApplicationModel用于保存全局数据,如点玩家获取等级信息等。

public ApplicationModel: MonoBehaviour{
    public static int point {get;set;}

    //try to load the PlayerPerfabs when start game.
    static ApplicationModel(){
        if(PlayerPerfabs.HasKey("point")){
            point = PlayerPerfabs.GetInt("point");
        }else{
            point = 0;
        }

    }

    //coroutine to set the data to PlayerPerfabs
    IEnumerator Save()
    {
        while (true)
       {
          Debug.Log("setting playerperfab ....");
          yield return new WaitForSeconds(5f);
          ApplicationModel.RestorePerfab();
       }
    }

    public static void RestorePerfab(){
         PlayerPerfabs.SetInt("point", point);
    }
    private void Start(){
      StartCoroutine(Save());
    }

}

但是协程从未根据控制台日志执行(导致日志从未打印过)。

也许是因为我没有将这个脚本附加到游戏对象上,但是一旦我将它附加到游戏对象上,那么当场景发生变化或游戏对象被破坏时,定期保存将会结束,对吧?那怎么做呢?

1 个答案:

答案 0 :(得分:2)

您需要创建一个GameObject,然后如果您希望它能够工作,请将此脚本附加到该脚本。如果你正在改变场景并希望它继续工作,你可以在DontDestroyOnLoad上调用GameObject,当你切换场景时它不会被破坏。