Текст интерфейса не обновляется - PullRequest
0 голосов
/ 14 апреля 2020

Я знаю, так много людей задавали этот вопрос. Я прошел все эти посты, и ни одно из решений не решило мою проблему. я создаю индикатор уровня, здесь, в этом сценарии, я пытаюсь обновлять текст (levelNumber) и добавлять +1 к levelNumber при каждом завершении уровня, здесь я использую playerprefs для сохранения levelNumber, чтобы данные могли проходить через следующие уровни (сцены) ). но проблема в том, что levelNumber даже не обновляется в текстовом поле, так как согласно сценарию Text_1 должен начинаться с 0, а Text_2 с 1, когда игра начинает показывать значения, которые я дал в инспекторе 1 и 2., чтобы подтвердить, что я изменил значения в инспекторе на 21 и снова 30, когда игра начинает показывать 21 и 30. Это означает, что текст интерфейса не обновляется из скрипта.

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 ]

1 голос
/ 14 апреля 2020

Проблема в том, что вы никогда не сохраняете свои levelNumber в prefs во время выполнения, поэтому ваша функция LevelUp должна выглядеть следующим образом:

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

См. do c

0 голосов
/ 14 апреля 2020

В методе private void UpdateLevel(int level) вы устанавливаете this.levelNumber = levelNumber. И атрибут метода int level. Поэтому вы можете сделать следующее:

this.levelNumber = level;

И я не совсем уверен, где вы вызываете метод private void LevelUp(), поскольку он является закрытым и не вызывается нигде в этом классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...