Задать вопрос
@Serpent24

Проблема в коде?

Добрый день, при запуске игры вылазит красная ошибка(скину ниже исходный код и саму ошибку). Прошу помочь, ибо в Visual Studio без ошибок, а Unity ругается. Заранее спасибо!
Ошибка - NullReferenceException: Object reference not set to an instance of an object
PokeyBallTest.ProgressBar.ProgressBar.OnLevelChanged (PokeyBallTest.Level level, System.Int32 levelNumber) (at Assets/Scripts/ProgressBar/ProgressBar.cs:41)
Код: ругается на строку _slider.maxValue = level.YEndLinePosition;
public class ProgressBar : MonoBehaviour
    {
        [SerializeField] private LevelManager levelManager;
        [SerializeField] private PlayerController playerController;
        [SerializeField] private TMP_Text currentLevelText;
        [SerializeField] private TMP_Text nextLevelText;

        private Slider _slider;
        private int _nextLevelNumber;
        //Булевая для проверки прошли ли мы максимально-возможное значение слайдера
        private bool _isValueMax;

        private void Start()
        {
            _slider = GetComponent<Slider>();
        }
        private void OnEnable()
        {
            //Подписки на события
            levelManager.LevelChanged += OnLevelChanged;
            playerController.YPositionChanged += PlayerYPositionChanged;
        }
        private void OnDisable()
        {
            //Подписки от событий
            levelManager.LevelChanged -= OnLevelChanged;
            playerController.YPositionChanged -= PlayerYPositionChanged;
        }       
        private void OnLevelChanged(Level level, int levelNumber)
        {
            //Устанавливаем максимальные и минимальные значения слайдера
            //на основании конечной позиции EnLine и стартовой позиции игрока
            _slider.maxValue = level.YEndLinePosition;
            _slider.minValue = playerController.StartingPosition.y;
            _isValueMax = false;
            //Устанавливаем текстовые значения уровней посредством индексов уровня, которые мы получили из LevelManager
            ++levelNumber;
            _nextLevelNumber = levelNumber + 1;
            currentLevelText.text = levelNumber.ToString();
            nextLevelText.text = _nextLevelNumber.ToString();
        }
        private void PlayerYPositionChanged(float yPosition)
        {
            //Изменяем значение слайдера при изменении позиции игрока по оси y
            _slider.value = yPosition;
            //Проверяем перешли ли мы порог максимального значения
            //и изменяем текстовое значение уровня на следующий
            if (_slider.value >= _slider.maxValue && !_isValueMax)
            {
                currentLevelText.text = _nextLevelNumber.ToString();
                _isValueMax = true;
            }
        }
    }
  • Вопрос задан
  • 70 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
alfss
@alfss
https://career.habr.com/alfss
В дебаге запустить и поставьте брейкпоинт до этой строки, посмотрите какие значения у переменных.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы