0

Пробую создать лобби для игры, решил воспользоваться плагином Photon. Делал всё по видеоуроку, но почему-то у меня не работает экран загрузки(3 раза перепроверил код и всё остальное в точности как у меня).

В общем, есть у меня 5 менюшек и все они скрыты. Через скрипт они открываются и закрываются когда нужно, но проблема в том, что я хочу чтобы при заходе в игру появлялась надпись "Загрузка...". На видео при запуске игры в юнити пишет "Загрузка", а у меня чёрный экран и ошибка:

NullReferenceException: Object reference not set to an instance of an object
Launcher.Start () (at Assets/Scripts/Launcher.cs:19).

То есть я пытаюсь дёрнуть из массива название своей менюшки, а именно "loading", но при загрузке игры она не открывается, но если в одной моей меню нажать кнопку, которая перекидывает в другое меню, то экран загрузки появляется. То есть что я хочу: При запуске игры должна быть надпись "Загрузка..." и когда присоединились уже к лобби, то открывается само меню. Меню появляется, но загрузка нет, она с ошибкой.

При нажатии "Создать комнату" у меня идёт как раз "Загрузка" и открывается меню создание комнаты. Почему тогда при старте не открывается загрузочное меню? Я не понимаю что ошибка мне эта из консоли говорит.

Вот код скрипта Launcher:

private void Start()
    {
        Debug.Log("Присоединяемся к мастер серверу");
        PhotonNetwork.ConnectUsingSettings();
        MenuManager.instance.OpenMenu("loading");
    }
public override void OnConnectedToMaster()
{
    Debug.Log("Вы присоеденились к мастеру");
    PhotonNetwork.JoinLobby();
}

public override void OnJoinedLobby()
{
    Debug.Log("Вы присоеденились к лобби");
    MenuManager.instance.OpenMenu("mainMenu");
}

public void CreateRoom()
{
    if (string.IsNullOrEmpty(_roomInputField.text)) return;
    PhotonNetwork.CreateRoom(_roomInputField.text);
    MenuManager.instance.OpenMenu("loading");
}

Скрипт Menu (открытия менюшек):

public string menuName;
public void Open()
{
    gameObject.SetActive(true);
}

public void Close()
{
    gameObject.SetActive(false);
}

Скрипт MenuManager (там где все объекты):

public static MenuManager instance;
[SerializeField] private List<Menu> _menus;

public void OpenMenu(string menuName)
{
    foreach (Menu menu in _menus)
    {
        if (menu.menuName == menuName)
        {
            menu.Open();
        }
        else
        {
            menu.Close();
        }
    }
}
void Start()
{
    instance = this;
}

Сам юнити:

Unity

  • https://ru.stackoverflow.com/q/413041/373567 – aepot Oct 19 '22 at 17:35
  • не понимаю всё равно. В коде я никак не инициализирую объект этот и он не равен нулл, так как это объект в Юнити. Почему что же это меню загрузки открывается при нажатии на кнопку в другой менюшке, а в методе Start не хочет, хотя всё в одном скрипте и в юнити всё одинаково. Прикол то в том, что и код, и в юнити у меня всё как у чела, а у меня не работает, а у него всё ок – Максим Oct 19 '22 at 17:56
  • Вы показали 2 обрубка кода, которые непонятно как друг с другом взаимодействуют. Не сказали в какой строке ошибка, не показали стек вызовов, о чем может идти речь? Отлаживайте код, выполняйте пошагово, смотрите значения переменных. Такое исключение может возникнуть только если вместо объекта в ссылочную переменную подсунуть null и обратиться к его членам. Гдк код Launcher? Что такое MenuManager.instance? Где метод OpenMenu? – aepot Oct 19 '22 at 17:59
  • исправил в вопросе – Максим Oct 19 '22 at 18:16
  • instance = this; перенесите в Awake() – aepot Oct 19 '22 at 18:20
  • 1
    Спасибо, помогло, выручили прям. Как я понял Awake работает до запуска игры получается? Типо обрабатывает все переменные, методы и тд, а метод Start когда игра уже запущена? Я просто только знакомлюсь с Юнити. Точнее я с ним работал на базовом уровне, но прошёл уже год и с трудом вспоминаю его функционал. – Максим Oct 19 '22 at 18:59
  • @Максим почитайте порядок исполнения Unity Events https://docs.unity3d.com/Manual/ExecutionOrder.html – Psyxoz0x13 Oct 20 '22 at 13:47

0 Answers0