Я знаю, так много людей задавали этот вопрос. Я прошел все эти посты, и ни одно из решений не решило мою проблему. я создаю индикатор уровня, здесь, в этом сценарии, я пытаюсь обновлять текст (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();
}
}