Я создаю приложение AR, используя Unity.
Он имеет сцены входа/регистрации, которые позволяют пользователю войти или зарегистрироваться в приложении.
Для обработки ошибок и отображения сообщений об ошибках для пользователя (например, неверный адрес электронной почты) я просто создаю панель с текстом на ней для отображения сообщений об ошибках. На этой панели также есть кнопка, чтобы закрыть сообщение и снова скрыть панель ошибок.
Эта панель накладывается поверх основной панели пользовательского интерфейса, на которой есть поля ввода.
Очевидно, что панель ошибок должна быть скрыта при загрузке сцены и отображаться только при наличии сообщения об ошибке.
Но я не могу установить состояние этой панели на Awake(). Я продолжаю получать сообщение об ошибке NullReferenceException: ссылка на объект не указывает на экземпляр объекта.
Я установил скрипт на панель ошибок и добавил объект Panel в скрипт в Инспекторе. изображение прикреплено для справки.
Ниже приведен мой сокращенный код (using опущено для краткости). Я пытался установить его в Start() и Awake(), но оба выдают одну и ту же ошибку. Если я устанавливаю errorPanel.gameObject.SetActive(true); в Awake(), ошибка не возникает. Он генерируется, только если для него задано значение false.
public class RegisterScene : MonoBehaviour {
public GameObject errorPanel; // Error panel
void Awake()
{
errorPanel = GameObject.FindGameObjectWithTag("errorPanel"); // Error panel Tag
Debug.Log("Error Panel: " + errorPanel); // Outputs "ErrorPanel" as named in Inspector
errorPanel.gameObject.SetActive(false); // Have to hide on scene Awake - throws NullReferenceError here
//errorPanel.gameObject.SetActive(true); // This works as a test case
}
// Register button clicked
public void Register ()
{
// If error
showErrorPanel("You must complete all sections");
}
// Show error panel
public void showErrorPanel(string errorMessage)
{
Debug.Log("Showing error panel");
errorPanel.gameObject.SetActive(true); // Working - shows error panel
// Confirmation button on error panel clicked
hideErrorPanel();
}
// Hide error panel
public void hideErrorPanel()
{
Debug.Log("Hiding error panel");
errorPanel.gameObject.SetActive(false); // Working - hides error panel
}
}
RegisterScene
в вашем вопросе отличается от того, который прикреплен к вашему GameObject. Вы удалили так много кода, и я думаю, что проблема может исходить оттуда. Обязательно сохраните скрипт, запустите его еще раз из редактора, затем дважды щелкните ошибку. Он приведет вас туда, где ошибка. Убедитесь, что это именно то место, откуда, как вы сказали, исходит ошибка. - person Programmer   schedule 11.06.2018