2017-04-12 12 views
2

私はPlayerPerfabsを使用して、プレイヤーのロックが解除されているポイントやゲーム中のポイントなどのプレーヤーデータを保存しています。プレイ中にPlayerPerfabsデータを定期的に(5秒ごとに)私はレベルの情報などを取得するポイントプレーヤーのようなグローバルデータを保持するためにApplicationModelというクラス..ユニティはPlayerPrefsのデータを定期的に設定します

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

} 

をしたが、コルーチンは、コンソールログ(ログが印刷されなかった原因)に従って実行されることはなかったです。

ゲームオブジェクトにこのスクリプトを添付していない可能性がありますが、これをゲームオブジェクトにアタッチすると、シーンが変更されたり、ゲームオブジェクトが破棄されたりすると、定期的な保存が終了します。だからこれをどうやって?

答えて

2

GameObjectを作成して、それを動作させるには、このスクリプトを添付する必要があります。シーンを変更していて、作業を続行したい場合は、にDontDestroyOnLoadと呼ぶことができ、シーンを切り替えると破壊されません。

+0

シングルトンを使う方が良いと思います。データリンクデオを複製する必要はありません。 – Andromelus

関連する問題