


Unity 3d Ассет Mirror. Ошибка.
При запуске Хоста с билда выдаёт ошибку "nullreferenceexception: object reference not set to an instance of an object"(При запуске в Unity ошибок нет). Как можно решить?
Ошибка 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.