Ошибка NullReferenceException
| |
ArtemS | Дата: Понедельник, 20 Марта 2017, 17:51 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| В консоли движка выводится ошибка "NullReferenceException: Object reference not set to an instance of an object PlayerScript.OnDestroy () (at Assets/Scripts/PlayerScript.cs:112)"
в скрипте прописано
void OnDestroy() { // Game Over. var gameOver = FindObjectOfType<GameOverScript>(); gameOver.ShowButtons(); }
ошибок никаких нет. Единственное в скрипте <GameOverScript> подчеркнуто
Application.LoadLevel("Menu");
сказано что устарел метод, надо юзать другой, но у меня почему-то он не работает. Предпологаю, что у меня 5,5,1f, а новый метод начал работать лишь в 5,5,3
Так вот и вопрос, неужели первая ошибка из-за этого или есть какая-то ошибка в синтаксисе. все работает отлично, просто хочу разобраться что за хрень
хуяк, хуяк и в продакшн
|
|
| |
Nordicus666 | Дата: Понедельник, 20 Марта 2017, 18:13 | Сообщение # 2 |
был не раз
Сейчас нет на сайте
| Reference - ссылка, у тебя в методе OnDestroy, когда ты пытаешься взаимодействовать с gameover (gameover.showbuttons) выходит так, что обращаешься к переменной с null внутри (исходя из текста ошибки), следовательно, когда ты создаешь переменную и запихиваешь в нее FindObjectOfType<GameOverScript>(), то этот findobject ничего не возвращает, следовательно он ничего не находит вывод: FindObjectOfType<GameOverScript>() не находит GameOverScript, ничего не возвращает, в переменной null, ты пытаешься с ней взаимодействовать, вылетает ошибка.
|
|
| |
ArtemS | Дата: Понедельник, 20 Марта 2017, 18:31 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Цитата Nordicus666 ( ) Reference - ссылка, у тебя в методе OnDestroy, когда ты пытаешься взаимодействовать с gameover (gameover.showbuttons) выходит так, что обращаешься к переменной с null внутри (исходя из текста ошибки), следовательно, когда ты создаешь переменную и запихиваешь в нее FindObjectOfType<GameOverScript>(), то этот findobject ничего не возвращает, следовательно он ничего не находит вывод: FindObjectOfType<GameOverScript>() не находит GameOverScript, ничего не возвращает, в переменной null, ты пытаешься с ней взаимодействовать, вылетает ошибка.
Так получается у меня кнопки удаляются, а потом при смерти появляются.
using UnityEngine; using UnityEngine.UI; using System.Collections;
/// <summary> /// Start or quit the game /// </summary> public class GameOverScript : MonoBehaviour { private Button[] buttons;
void Awake() { // Get the buttons buttons = GetComponentsInChildren<Button>(); // Disable them HideButtons(); }
public void HideButtons() { foreach (var b in buttons) { b.gameObject.SetActive(false); } }
public void ShowButtons() { foreach (var b in buttons) { b.gameObject.SetActive(true); } }
public void ExitToMenu() { // Reload the level Application.LoadLevel("Menu"); } public void RestartGame() { // Reload the level Application.LoadLevel("Stage1"); } }
Получается он не находит нечего потому, что у меня HideButton ? Как можно сделать так , чтобы он не писал мне эту ошибку, подскажи пожалуйста если можешь)
хуяк, хуяк и в продакшн
|
|
| |
Nordicus666 | Дата: Понедельник, 20 Марта 2017, 18:54 | Сообщение # 4 |
был не раз
Сейчас нет на сайте
| Смотри: дело не в этом скрипте, дело в том, что когда ты делаешь gameover = findObjectOfType<...>(); у тебя в gameover записывается, по простому этот скрипт (а вообще ссылка на него) и ты можешь через эту переменную сразу обращаться к этому скрипту (ну в том же и суть функции findobjectoftype()), но если эта функция (так написано в ее описании, вроде (я её сопоставляю с GetComponent<>() и подобными)) не находит то что ты хочешь, она возвращает null и в переменную соответственно тоже записывается null, а не этот скрипт, и когда ты пытаешься вызвать его функцию, ты пытаешься вызвать функцию "у ничего", у null, ествественно тебе и выдает ошибку nullreferenceexeption - в дословном переводе: Пустота ссылка ошибка, т.е. ошибка пустой ссылки знаю, пишу много и однообразного, но я первый раз кому то помогаю вообще, а так же просто пытаюсь разными путями одно и то же объяснить для удобства :DDДобавлено (20 марта 2017, 18:54) --------------------------------------------- Возможно твой GameOverScript нигде не лежит (т.е. его нет ни в одном объекте на сцене) и как следствие FindObjectOfType его не находит
|
|
| |
ArtemS | Дата: Понедельник, 20 Марта 2017, 19:05 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Цитата Nordicus666 ( ) Смотри: дело не в этом скрипте, дело в том, что когда ты делаешь gameover = findObjectOfType<...>(); у тебя в gameover записывается, по простому этот скрипт (а вообще ссылка на него) и ты можешь через эту переменную сразу обращаться к этому скрипту (ну в том же и суть функции findobjectoftype()), но если эта функция (так написано в ее описании, вроде (я её сопоставляю с GetComponent<>() и подобными)) не находит то что ты хочешь, она возвращает null и в переменную соответственно тоже записывается null, а не этот скрипт, и когда ты пытаешься вызвать его функцию, ты пытаешься вызвать функцию "у ничего", у null, ествественно тебе и выдает ошибку nullreferenceexeption - в дословном переводе: Пустота ссылка ошибка, т.е. ошибка пустой ссылки знаю, пишу много и однообразного, но я первый раз кому то помогаю вообще, а так же просто пытаюсь разными путями одно и то же объяснить для удобства :DD
понятно)) ну в общем у меня юнька похоже повисла, просто перезагрузил ее и ошибка пропала)))) надеюсь навсегда. спасибо за объяснение
хуяк, хуяк и в продакшн
|
|
| |
|