用户界面文字未更新

时间:2020-04-14 12:54:10

标签: c# unity3d user-interface

我知道,很多人问过这个问题。我已经去了所有这些职位,但没有一个解决方案可以解决我的问题。我正在创建一个关卡进度条,在此脚本中,我试图更新文本(levelNumber)并在每次关卡完成时向levelNumber添加+1,在这里我使用playerprefs保存levelNumber,以便数据可以通过下一个关卡(场景) )。但是问题是levelNumber甚至没有在Text字段中更新,根据脚本,当游戏开始显示我在检查器1和2中给出的值时,Text_1应该从0开始,Text_2从1开始,以确认我已经将inspector中的值更改为21游戏开始显示21和30时,再次输入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();
 }

}

2 个答案:

答案 0 :(得分:1)

问题在于您在执行过程中从未将levelNumber保存到首选项,因此您的LevelUp函数应类似于:

private void LevelUp()
{
     UpdateLevel(levelNumber + 1);
     PlayerPrefs.SetInt("LevelNumber", levelNumber);
     PlayerPrefs.Save();
}

查看此doc

答案 1 :(得分:0)

在方法private void UpdateLevel(int level)中,您要设置this.levelNumber = levelNumber。 方法的属性为int level。 所以您可能想做:

this.levelNumber = level;

而且我不太确定您在哪里调用方法private void LevelUp(),因为它是私有的,并且在此类中的任何地方都没有被调用。