Как разобраться с кейсом: баг (или глупый разраб) при билде Unity игры на Android?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: делаю свою первую игру на Unity. До конца её еще не сделал, решил протестить на android.
Сейчас ситуация такая: тестил и на реальном планшете, и на эмуляторе Android Studio. И там и там получается одна и та же ситуация. Судя по всему (логам), некоторые объекты со скриптами не создаются (или удаляются). Хз как это правильно назвать, но их нет, их скроипты не запускаются, при обращении к ним в логах пишет:

UnitDatabase.Instance is NULL!

Сейчас ситуация такая: попроверял создавать объект из кода других скриптов, но судя по логам, созданный скрипт, всё равно не выполняется.

Сейчас ситуация такая: ну и я так понимаю, что много объектов не создаётся, потому что я специально делал тестовый скрипт в отдельном объекте и в нескольких уже существующих, но он ни разу не вылез в логах:

using UnityEngine; public class TestLogger : MonoBehaviour { void Awake() { Debug.Log("TestLogger Awake"); } void Start() { Debug.Log("TestLogger Start"); } }

Из базы:
В Unity всё работает нормально.
По вводным: сцена одна. Она билдится.
По вводным: объекты действительно есть и они активны.
По вводным: компонент точно применен к объекту.
Заново объекты создавал.
По вводным: добавил этим объектам спрайты, в Unity они есть, на android уже нет.
Сейчас ситуация такая: в коде эти объекты нигде не удаляются.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Если в Unity на Android объекты со скриптами не создаются или UnitDatabase.Instance is NULL, нужно смотреть не “Android вообще”, а порядок загрузки сцен, наличие объекта в build, инициализацию singleton и stripping. В редакторе Unity многое может работать случайно из-за порядка запуска, а на Android порядок и скорость отличаются.

Проверьте первое: сцена с объектом UnitDatabase точно добавлена в Build Settings и загружается до тех скриптов, которые к нему обращаются. Частая ошибка — объект есть в тестовой сцене в редакторе, но в Android build стартует другая сцена.

Singleton должен инициализироваться в Awake():

public class UnitDatabase : MonoBehaviour
{
    public static UnitDatabase Instance { get; private set; }
 
    private void Awake()
    {
        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
            return;
        }
 
        Instance = this;
        DontDestroyOnLoad(gameObject);
    }
}

public class UnitDatabase : MonoBehaviour { public static UnitDatabase Instance { get; private set; } private void Awake() { if (Instance != null && Instance != this) { Destroy(gameObject); return; } Instance = this; DontDestroyOnLoad(gameObject); } }

Если другой скрипт обращается к UnitDatabase.Instance в своём Awake(), порядок может быть неправильным. Перенесите обращение в Start() или настройте Script Execution Order.

Для диагностики добавьте логи в Awake, OnEnable, Start и смотрите logcat:

adb logcat -s Unity

adb logcat -s Unity

Если лог TestLogger не появляется вообще, значит объект не попал в сцену, выключен, удаляется до старта, сцена не та, или код не входит в сборку. Проверьте active state объекта и компонента, а также нет ли условий компиляции:

#if UNITY_EDITOR
// код только для редактора
#endif

#if UNITY_EDITOR // код только для редактора #endif

Ещё один вариант — Managed Stripping Level. Если объекты/типы создаются через reflection или строки, Android build может выкинуть часть кода. Для проверки временно поставьте stripping ниже или добавьте link.xml.

Итог: начните с Build Settings, порядка сцен и логов Awake/Start через adb logcat. Потом проверьте singleton-порядок и stripping. Почти всегда причина в том, что объект с базой не существует в Android-сцене в момент обращения.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно