S
S
Serpent242021-01-06 16:48:07
C++ / C#
Serpent24, 2021-01-06 16:48:07

Problem in code?

Good afternoon, when you start the game, a red error pops up (I will throw off the source code and the error itself below). Please help, because there are no errors in Visual Studio, and Unity swears. Thanks in advance!
Error - 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)
Code: swears at line _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;
            }
        }
    }

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
alfss, 2021-01-06
@Serpent24

In debug run and set a breakpoint to this line, see what values ​​the variables have.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question