2017-02-15 6 views
2

私は次の問題を抱えています:私は釣りゲームを持っています。これまでのところ、私がゲームをすると、私は釣りを始めることができ、2,3,4匹以上の魚を捕まえることができます。ユニティにスコアを保存するには

しかし、ゲームを一時停止したい場合(私がシーンに置いたESCまたはボタンを押す)スコアがリセットされます。また、ゲームを一時停止したり、店舗ボタンに入っても、スコアを保存する方法はわかりません。

スタート機能

void Start() 
{ 
    PlayerPrefs.GetInt("Pesti"); 
    NrPesti.text = PlayerPrefs.GetInt("Pesti").ToString(); 

    PlayerPrefs.GetInt("Viermisori"); 
    NrViermisori.text = PlayerPrefs.GetInt("Viermisori").ToString(); 

    PlayerPrefs.GetInt("Score"); 
    Score.text = PlayerPrefs.GetInt("Score").ToString(); 

    PlaySound(0); 
} 

更新機能:

void Update() 
{ 
    Debug.Log(NrViermisori.text); 
    Debug.Log(NrPesti.text); 
    Debug.Log(Score.text); 
    if (NrPesti.name =="Pesti") 
    { 
     NrPesti.text = "Lovers: " + NrPesti.text; 
    } 
    PlayerPrefs.SetString("NrPesti", NrPesti.text); 
    if(NrViermisori.name == "Viermisori") 
    { 

     NrViermisori.text = "Beasts: " + NrViermisori.text; 
    } 
    PlayerPrefs.SetString("Viermisori", NrViermisori.text); 


    if (Input.GetKeyDown(KeyCode.Escape)) Application.Quit(); 

} 
+0

スコアをPlayerPrefsに保存すると、シナリオを処理するための何も表示されません。 – TerNovi

+0

あなたは 'Pesti'の値をどこにも設定していないかもしれないからでしょうか?加えて、あなたはPlayerPrefsを保存していません。 –

+0

https://docs.unity3d.com/ScriptReference/PlayerPrefs.Save.html – Maakep

答えて

0

あなたは、あなたが適切なattributesに覚えておくために必要なすべてを保存GameManagerクラスのようなものを持っている必要があります。ゲームを開始すると、GMのインスタンスが作成され、ゲームロジックでこのオブジェクトが参照されます。スコアのようなものは、GM内で保存して処理する必要があります。そうすれば、ゲームが生きている間にあなたのスコアを「保存」することができます。

1

Escape Pressを検出しているコードに何かを追加してください。

if (Input.GetKeyDown(KeyCode.Escape)){ 
    PlayerPrefs.setInt("Score", Int32.Parse(Score.text)); 
    //Verify property is saved 
    Int scoreTest = PlayerPrefs.getInt("Score"); 
    Debug.Log(scoreTest); 
    Application.Quit(); 
} 

グッドラック

1

私は、これは直接Text.text上で操作を行うことで、あなたのスコアを読み込む/保存するための正しい方法ではないと思います。
スコアを保存して読み込みたい場合は、別の変数scoreを作成してスコアを保存し、次にUIエレメントでスコアを使用します。たとえば、これを使用すると、実行時にスコアを保存する方法
について説明します。

public class Score: MonoBehaviour { 

    public int score = 0; 

    // Use this for initialization 
    void Start() { 
     // get the score when this gameObject initialized 
     score = PlayerPrefs.GetInt("Player Score"); 
    } 

    // Update is called once per frame 
    void Update() { 
     // this is how you set your score to PlayerPrefs 
     if (Input.GetKeyDown(KeyCode.Escape)) { 
      PlayerPrefs.SetInt("Player Score", score); 
     } 
    } 

    // this is an public function to be used 
    // outside of the class to update score 
    public void UpdateScore(int amount) { 
     score += amount; 
    } 
} 

そして、あなたのUIクラスであなたのスコアを使用します。

public class DisplayScore : MonoBehaviour { 

    public Text scoreText; 
    public Score playerScore; 

    // Use this for initialization 
    void Start() { 
     // get your Score component here or just drag it in inspector 
    } 

    // Update is called once per frame 
    void Update() { 
     // this updates the score at every frame 
     scoreText.text = playerScore.score.ToString(); 
    } 
} 

は、このように/負荷スコアを保存し、using UnityEngine.UIを忘れないでくださいはるかに簡単になります。

通常、すなわちチェックポイント(ゲームが終了したときにデータが自動的にディスクに書き込まれますので、あなたは(それがOnApplicationQuit()に自動的に呼び出されます)PlayerPrefs.Save()を呼び出す必要はありませんが、ある時点でそれを呼び出す必要があり)プログラムのクラッシュやその他の予期しない状況の場合に。

+0

私はまだそれをどうすることができるか理解していません。 –

+0

@StefanSmarandache 'PlayerPrefs'の仕組みを理解する必要があります。' PlayerPrefs'は、ゲームセッションの間にプレーヤーの好みを保存し、アクセスします。シーンに変数を格納してキーと値を与え、別のシーンの値に指定したキーでアクセスすることができます。 'PlayerPrefs'に関するドキュメントはこちらから読んでください:(https://docs.unity3d.com/ScriptReference/PlayerPrefs.html) –

関連する問題