[英]UI text not updating
我知道,很多人都問過這個問題。 我已經閱讀了所有這些帖子,但沒有一個解決方案可以解決我的問題。 我正在創建一個級別進度條,在此腳本中,我嘗試更新文本(levelNumber)並在每次級別完成時向 levelNumber 添加 +1,這里我使用 playerprefs 保存 levelNumber,以便數據可以通過下一個級別(場景)。 但問題是 levelNumber 甚至沒有在 Text 字段中更新,根據腳本 Text_1 應該從 0 開始,Text_2 從 1 開始,當游戲開始顯示我在檢查器 1 和 2 中給出的值時。確認我已將檢查器中的值更改為 21當游戲開始顯示 21 和 30 時,再次顯示 30。這意味着 UI 文本未從腳本更新。
public class PrograssBar : MonoBehaviour
{
[SerializeField] private Text Text_1;
[SerializeField] private Text Text_2;
private int levelNumber = 0;
[SerializeField] Transform startTransform;
Transform finishTransform;
[SerializeField] Slider slider;
float maxDistance;
void OnEnable()
{
levelNumber = 0;
}
void Start()
{
finishTransform = GameObject.FindGameObjectWithTag("CloneGoal").GetComponent<Transform>();
maxDistance = getDistance();
levelNumber = PlayerPrefs.GetInt("LevelNumber");
}
void Update()
{
if (startTransform.position.z <= maxDistance)
{
float distance = 1 - (getDistance() / maxDistance);
setProgress(distance);
}
}
float getDistance()
{
return Vector3.Distance(startTransform.position, (finishTransform.position - new Vector3(0, 0, 22)));
}
void setProgress(float p)
{
slider.value = p;
}
private void LevelUp()
{
UpdateLevel(levelNumber + 1);
PlayerPrefs.SetInt("LevelNumber", levelNumber);
}
private void UpdateLevel(int levelNumber)
{
this.levelNumber = levelNumber;
Text_1.text = " " +this.levelNumber.ToString();
Text_2.text = " " +(this.levelNumber + 1).ToString();
}
}
問題是您在執行期間從未將levelNumber
保存到首選項,因此您的LevelUp
function 應該如下所示:
private void LevelUp()
{
UpdateLevel(levelNumber + 1);
PlayerPrefs.SetInt("LevelNumber", levelNumber);
PlayerPrefs.Save();
}
請參閱此 文檔
在方法private void UpdateLevel(int level)
中,您正在設置this.levelNumber = levelNumber
。 並且方法的屬性是int level
。 所以你可能想做:
this.levelNumber = level;
而且我不太確定您在哪里調用private void LevelUp()
方法,因為它是私有的,並且在此 class 內的任何地方都沒有調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.