如何以统一方式更新UI滑块

时间:2017-04-01 19:49:12

标签: c# unity3d

我正在建立一个统一的自上而下的射击游戏,在游戏中,玩家健康状况由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");
}

1 个答案:

答案 0 :(得分:0)

您的代码中存在两个问题:

1 。您使用SetFloat保存并使用GetInt加载。您应该使用SetFloatGetFloat保存并加载。

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 ”?