【问题标题】:UI text not updatingUI 文本未更新
【发布时间】:2020-07-27 05:05:30
【问题描述】:

我知道,很多人都问过这个问题。我已经看过所有这些帖子,但没有一个解决方案能解决我的问题。我正在创建一个级别进度条,在此脚本中,我尝试更新文本(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();
 }

}

【问题讨论】:

    标签: c# unity3d user-interface


    【解决方案1】:

    问题是您在执行期间从未将您的levelNumber 保存到首选项,因此您的LevelUp 函数应如下所示:

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

    看到这个doc

    【讨论】:

    • 谢谢,实际上 playerprefs 工作正常,但问题是 levelNumber 甚至没有在 Text 字段中更新,根据脚本 Text_1 应该在游戏开始时从 0 开始,Text_2 从 1 开始,但它显示的值是我给出的检查员 1 和 2。当游戏开始显示 21 和 30 时,确认我已将检查员中的值再次更改为 21 和 30。这意味着 UI 文本未从脚本更新
    【解决方案2】:

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

    this.levelNumber = level;
    

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

    【讨论】:

    • 很抱歉,实际上我在脚本中使用了 level 而不是 levelNumber,但我在这里改为 levelNumber,所以我认为你理解得更好。我的错误我忘记将那个级别更改为 levelNumber ,所以它不起作用
    • 你尝试记录这个吗?记录 LevelUp 和 UpdateLevel 方法并打印这些方法的值,也许它们甚至没有被调用/触发
    • 我没有尝试记录,但每次我完成关卡时显示脚本中的值的一小部分文本字段,在再次加载下一个场景后,值更改为我在检查器中输入的值。我不明白发生了什么
    猜你喜欢
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多