2016-08-18 86 views
1

我最近一直在用tutorials創建遊戲。不幸的是,他們沒有涵蓋保存分數功能。感謝另一位用戶,我能夠弄清楚我需要使用playerprefs。我在線觀看了教程,但沒有一個對我有幫助。如果可以的話,請幫助我!使用PlayerPrefs(unity)

黃金每二段腳本:

using UnityEngine; 
using System.Collections; 

public class GoldPerSec : MonoBehaviour { 

    public UnityEngine.UI.Text gpsDisplay; 
    public Click click; 
    public ItemManager[] items; 

    void Start() { 
     StartCoroutine(AutoTick()); 
    } 

    void Update() { 
     gpsDisplay.text = GetGoldPerSec() + " Money Per Sec"; 
    } 

    public float GetGoldPerSec() { 
     float tick = 0; 
     foreach (ItemManager item in items) { 
      tick += item.count * item.tickValue; 
     } 
     return tick; 
    } 

    public void AutoGoldPerSec() { 
     click.gold += GetGoldPerSec()/10; 
    } 

    IEnumerator AutoTick() { 
     while (true) { 
      AutoGoldPerSec(); 
      yield return new WaitForSeconds(0.10f); 
     } 
    } 
} 

黃金每點擊腳本:

using UnityEngine; 
using System.Collections; 

public class Click : MonoBehaviour { 

    public UnityEngine.UI.Text gpc; 
    public UnityEngine.UI.Text goldDisplay; 
    public float gold = 0.00f; 
    public int goldperclick = 1; 

    void Update() { 
     goldDisplay.text = "" + gold.ToString("F0"); 
     gpc.text = "Money Per Click: " + goldperclick; 
    } 

    public void Clicked(){ 
     gold += goldperclick; 
    } 

} 

我的想法是爲遊戲時保存遊戲退出,只要您加載加載遊戲備份。我是一個完整的初學者,如果有人能告訴我如何做到這一點,請告訴我!謝謝! :d

+0

你想要什麼樣的價值保存? –

+0

我想保存遊戲當它退出,並加載它回來一次開放 –

+0

你可以保存遊戲的狀態(某些變量的值)。在你的情況下,它可以是黃金的價值。檢查我的答案 –

回答

1

請注意,PlayerPrefs是一個簡單的方法來保存數據,但也是一種非常不安全的方式。玩家可以很容易地操作他的「goldValue」,因爲它只是作爲一個整數存儲在他設備上的某個文件中。 PlayerPrefs應該通常只用於值,玩家可以在遊戲中改變任何方式,像音量設置等

示例代碼

void Save() 
{ 
    string filename = "/filename.dat"; 
    BinaryFormatter bf = new BinaryFormatter(); 
    FileStream file = File.Create(Application.persistentDataPath+filename); 
    bf.Serialize(file, goldValue); //Use can easily use e.g. a List if you want to store more date 
    file.Close(); 
} 

    bool Load() 
{ 
    string filename = "/filename.dat"; 
    if (File.Exists(Application.persistentDataPath + filename)) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     FileStream file = File.Open(Application.persistentDataPath + filename, FileMode.Open); 
     goldValue=(int) bf.Deserialize(file); 
     file.Close(); 
     return true; 
    } 
    return false; 
} 
+0

感謝您的全力幫助。我設法弄清楚了。非常感謝。 –

1

下面的代碼添加到Click類:

void Awake() 
{ 
    LoadData(); 
} 

void OnApplicationQuit() 
{ 
    SaveData(); 
} 

void SaveData() 
{ 
    PlayerPrefs.SetFloat("gold",gold); 
} 

void LoadData() 
{ 
    gold = PlayerPrefs.GetFloat("gold",0f); 
} 
3

您可以使用統一現有的功能來實現這一目標。

保存數據使用統一的OnApplicationQuit功能這樣

void OnApplicationQuit() { 
    PlayerPrefs.SetFloat("key", value); 
} 

以及恢復的值,用統一的清醒功能這樣

void Awake(){ 
    value = PlayerPrefs.GetFloat("key"); 
} 
+0

我試過但沒有工作。 –