简体   繁体   English

UI 文本未更新

[英]UI text not updating

I know, so many of people have asked this question.我知道,很多人都问过这个问题。 I have gone to all of those posts, and none of the solutions have solved my problem.我已经阅读了所有这些帖子,但没有一个解决方案可以解决我的问题。 i am creating a level progress bar, here in this script i am trying to update text (levelNumber) and add +1 to levelNumber every time level is completed, here i am using playerprefs to save levelNumber so data can passes through next levels(scenes).我正在创建一个级别进度条,在此脚本中,我尝试更新文本(levelNumber)并在每次级别完成时向 levelNumber 添加 +1,这里我使用 playerprefs 保存 levelNumber,以便数据可以通过下一个级别(场景)。 but problem is levelNumber not even updating in Text field, as per script Text_1 should start from 0 and Text_2 from 1 when game starts its showing values which i have given in inspector 1 and 2. to confirm that i have changed values in inspector to 21 and 30 again when game starts its showing 21 and 30. that means UI Text not updating from script.但问题是 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();
 }

} }

The problem is that you never save your levelNumber to prefs during your execution, so your LevelUp function should look like:问题是您在执行期间从未将levelNumber保存到首选项,因此您的LevelUp function 应该如下所示:

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

See this doc请参阅此 文档

In the method private void UpdateLevel(int level) you're setting this.levelNumber = levelNumber .在方法private void UpdateLevel(int level)中,您正在设置this.levelNumber = levelNumber And the attribute of a method is int level .并且方法的属性是int level So you might want to do:所以你可能想做:

this.levelNumber = level;

And I'm not quite sure where you're calling the method private void LevelUp() since it's private and it's not called anywhere inside this class.而且我不太确定您在哪里调用private void LevelUp()方法,因为它是私有的,并且在此 class 内的任何地方都没有调用它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM