我正在使用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());
}
}
但是协程从未根据控制台日志执行(导致日志从未打印过)。
也许是因为我没有将这个脚本附加到游戏对象上,但是一旦我将它附加到游戏对象上,那么当场景发生变化或游戏对象被破坏时,定期保存将会结束,对吧?那怎么做呢?
答案 0 :(得分:2)
您需要创建一个GameObject
,然后如果您希望它能够工作,请将此脚本附加到该脚本。如果你正在改变场景并希望它继续工作,你可以在DontDestroyOnLoad
上调用GameObject
,当你切换场景时它不会被破坏。