Понедельник, 26 июня 2017, 01:34

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
Страница 1 из 11
Модератор форума: beril 
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Ошибка NullReferenceException
Ошибка 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


понятно)) ну в общем у меня юнька похоже повисла, просто перезагрузил ее и ошибка пропала)))) надеюсь навсегда. спасибо за объяснение
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Ошибка NullReferenceException
Страница 1 из 11
Поиск:

Все права сохранены. GcUp.ru © 2008-2017 Рейтинг