C# 如何在unity中更新UI滑块

C# 如何在unity中更新UI滑块,c#,unity3d,C#,Unity3d,我正在unity中构建一个自上而下的射击游戏,在游戏中,玩家的生命值由UI滑块表示。在场景之间移动时,我使用给定的向下代码保存玩家的生命值,我面临的问题是,当玩家在下一个关卡中生成时,UI滑块将移动到0而不是保存的值,直到对玩家造成一定的健康伤害,然后将其设置为保存的值 保存玩家生命值 public void yesTeleport(string levelname) { healthNumber = healthSlider.value; SceneManager

我正在unity中构建一个自上而下的射击游戏,在游戏中,玩家的生命值由UI滑块表示。在场景之间移动时,我使用给定的向下代码保存玩家的生命值,我面临的问题是,当玩家在下一个关卡中生成时,UI滑块将移动到0而不是保存的值,直到对玩家造成一定的健康伤害,然后将其设置为保存的值

保存玩家生命值

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。使用
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
函数,该函数在卸载场景时被调用。其中之一是禁用的
函数

void OnDisable()
{
    yesTeleport (...);
}
请将
yesTeleport
函数重命名为真正有意义的函数。也许该函数应该命名为“saveAndReload”