2017-04-12 4 views
2

Ich benutze PlayerPerfabs zum Speichern von Spieler Daten, welche Ebene der Spieler entsperrt hat und der Punkt während des Spiels hat, und ich möchte die PlayerPerfabs Daten regelmäßig aktualisiert werden (wie pro 5 Sekunden) ich habe eine Klasse namens ApplicationModel die globalen Daten wie Punkte-Spieler erhalten die Ebene Infos etc ..Unity Set PlayerPrefs Daten regelmäßig

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

} 

Aber die Koroutine nie nach dem Konsolenprotokoll ausgeführt wurde zu halten (weil das Protokoll wurde nie gedruckt).

Vielleicht, weil ich dieses Skript nicht an ein Spielobjekt angehängt habe, aber sobald ich dieses an ein Spielobjekt anschließe, wenn die Szene geändert oder das Spielobjekt zerstört wird, wird das regelmäßige Speichern beendet, oder? Also, wie geht das?

Antwort

2

Sie müssen ein GameObject erstellen und dann dieses Skript anhängen, wenn Sie möchten, dass es funktioniert. Wenn Sie Szenen wechseln und möchten, dass es weiterarbeitet, können Sie DontDestroyOnLoad auf diesem GameObject aufrufen und es wird nicht zerstört, wenn Sie Szenen wechseln.

+0

Ich denke, es wäre besser, ein Singleton zu verwenden. Als Datenverbindung müssen Deos nicht dupliziert werden. – Andromelus