Top.Mail.Ru
Ответы
Аватар пользователя
3мес
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+2

Unity 3d Ассет Mirror. Ошибка.

При запуске Хоста с билда выдаёт ошибку "nullreferenceexception: object reference not set to an instance of an object"(При запуске в Unity ошибок нет). Как можно решить?

По дате
По рейтингу
Аватар пользователя
Новичок
3мес

Ошибка NullReferenceException: Object reference not set to an instance of an object в Unity означает, что вы пытаетесь использовать объект, который не был инициализирован (то есть null). В случае с Mirror и запуском хоста из билда, это может быть вызвано рядом причин, особенно связанных с сетевыми объектами и их настройкой.

Вот последовательность шагов, чтобы диагностировать и решить проблему:
✅ 1. Проверка NetworkManager и NetworkManagerHUD
Убедитесь, что объект с NetworkManager есть на сцене и не удаляется между сценами.

Убедитесь, что у NetworkManager назначены поля:

Player Prefab (обязательно!)

Registered Spawnable Prefabs (если спавните что-либо через NetworkServer.Spawn())

🔸 Если в билде вы запускаете как хост (Client + Server), а Player Prefab не установлен — Unity не выдаст ошибку в инспекторе, но вызовет NullReferenceException при запуске.

✅ 2. Проверка стартовой сцены
Убедитесь, что сцена с NetworkManager включена в Build Settings.

При запуске билда Unity должна загружать сцену, содержащую NetworkManager. Иначе объект будет null.

✅ 3. Проверка Prefab'ов
Если вы используете команду NetworkServer.Spawn(somePrefab), убедитесь, что:

somePrefab добавлен в список Spawnable Prefabs в NetworkManager.

Префаб существует в Resources или Asset Bundle, если вы загружаете его вручную.

Нет попытки заспавнить объект до инициализации сервера.

✅ 4. Логирование
Вставьте отладочные сообщения в ваши скрипты:

void Start()
{
Debug.Log("NetworkManager: " + NetworkManager.singleton);
Debug.Log("IsServer: " + NetworkServer.active);
}

Также можете отследить, на каком именно объекте происходит NullReferenceException. Полная трассировка ошибки (stack trace) подскажет, в каком именно скрипте и строке это происходит.

Возможная причина — условный код под UNITY_EDITOR
Проверьте, нет ли у вас кода вроде:

#if UNITY_EDITOR
// инициализация чего-то важного
#endif

Такой код не будет работать в билде и может привести к null.

Пример распространённой ошибки

public GameObject someObject;

void Start() {
someObject.GetComponent<Renderer>().enabled = false;
}

Если someObject не назначен в инспекторе — получите NullReferenceException.