Я создаю приложение AR с использованием Unity.
В нем есть сцены входа / регистрации, которые позволяют пользователю войти или зарегистрироваться в приложении.
Для обработки ошибок и отображения сообщений об ошибках напользователь (например, недействительный адрес электронной почты), я просто создаю панель с текстом для отображения сообщений об ошибках.На этой панели также есть кнопка для закрытия сообщения и повторного скрытия панели ошибок.
Эта панель наложена на основную панель пользовательского интерфейса с полями ввода.
Очевидно,панель ошибок должна быть скрыта при загрузке сцены и отображаться только при наличии сообщения об ошибке.
Но я не могу установить состояние этой панели на Awake () .Я получаю сообщение об ошибке NullReferenceException: ссылка на объект не установлена для экземпляра объекта.
Я установил сценарий для панели ошибок и добавил объект Panelк сценарию в инспекторе.Изображение прикреплено для справки.
Ниже приведен мой сокращенный код ( с использованием для краткости опущен).Я попытался установить его в Start () и Awake () , но оба выдают одну и ту же ошибку.Если я установил errorPanel.gameObject.SetActive ( true ); in 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
}
}