2017-04-01 58 views
0

我正在建立一個統一的自上而下的射手,在遊戲中,玩家的健康狀況由UI滑塊表示。在場景之間移動時,我使用向下給定的代碼保存玩家的健康值,並使用GetFloat設置下一級。我面臨的問題是,當玩家在下一級別產生時,UI滑塊移動到0而不是保存的值,直到玩家對玩家造成一些健康傷害設置爲保存的值。如何更新統一的UI滑塊

保存球員的健康

public void yesTeleport(string levelname)  
{ 
    healthNumber = healthSlider.value; 
    SceneManager.LoadScene (levelname); 
    PlayerPrefs.SetFloat ("HealthValue", healthNumber); 
    PlayerPrefs.Save(); 
} 

在下一級別設置球員的健康

public Slider healthSlider; 

void Start() { 

    Time.timeScale = 1.0f; 
    healthSlider.value = PlayerPrefs.GetInt ("HealthValue"); 
} 

回答

0

有兩個問題在你的代碼:

。您要保存與SetFloat和用GetInt加載。您應該保存並加載SetFloatGetFloat

。在保存healthNumber值之前,您正在加載新場景。它應該是相反的。該SceneManager.LoadScene (levelname);代碼後應PlayerPrefs.SetFloat ("HealthValue", healthNumber);PlayerPrefs.Save();

你的代碼放在應該是這樣的:

public void yesTeleport(string levelname)  
{ 
    healthNumber = healthSlider.value; 
    PlayerPrefs.SetFloat ("HealthValue", healthNumber); 
    PlayerPrefs.Save(); 
    SceneManager.LoadScene (levelname); 
} 

public Slider healthSlider; 
void Start() { 

    Time.timeScale = 1.0f; 
    healthSlider.value = PlayerPrefs.GetFloat ("HealthValue"); 
} 

還要確保從統一的回調函數,得到一個調用yesTeleport功能時,現場卸載的叫。其中之一是OnDisable功能...

void OnDisable() 
{ 
    yesTeleport (...); 
} 

請重命名yesTeleport功能的東西,實際上是有意義的。也許這個函數應該被命名爲「saveAndReload」?