我正在建立一个统一的自上而下的射击游戏,在游戏中,玩家健康状况由UI滑块表示。在场景之间移动时,我使用向下给定的代码保存玩家的健康值,并使用GetFloat设置我面临的问题是,当玩家在下一级产生时,UI滑块移动到0而不是保存的值,直到对玩家造成一些健康损害,然后将其设置为保存的值。 / p>
保存玩家健康
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 :(得分:0)
您的代码中存在两个问题:
1 。您使用SetFloat
保存并使用GetInt
加载。您应该使用SetFloat
和GetFloat
保存并加载。
2 。在保存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");
}
还要确保从场景卸载时调用的Unity的一个回调函数中调用yesTeleport
函数。其中之一是OnDisable
函数......
void OnDisable()
{
yesTeleport (...);
}
请将yesTeleport
功能重命名为实际有意义的功能。也许该函数应命名为“ saveAndReload ”?