GameObject.Find не работает в сборке Android после перезагрузки Scene - PullRequest
0 голосов
/ 29 января 2019

У меня есть две сцены в единстве.Первый - для импорта данных из двоичного файла, а после импорта файла я создаю игровой объект с координатами, которые я прочитал из двоичного файла.Я использую DontDestroyOnLoad для этого игрового объекта.

Затем я загружаю вторую сцену, используя AsyncOperation , и нахожу свой объект, используя GameObject.Find.Это прекрасно работает, и я могу найти объект и сделать мои операции.Однако во второй сцене у меня есть кнопка сброса, с помощью которой я перезагружаю ту же сцену, используя AsyncOperation.Когда сцена перезагружается GameObject.Find не могу найти мой объект.Кстати, это происходит только в сборке Android.В редакторе он находит объект, в котором нет проблем.

Вот так я перезагружаю сцену, моя функция ResetScene вызывается при нажатии кнопки.

void ResetScene()
    {
        StartCoroutine(LoadAsyncScene());
    }
    IEnumerator LoadAsyncScene()
    {
        AsyncOperation asyncLoad = SceneManager.LoadSceneAsync("ARSession");

        while (!asyncLoad.isDone)
        {
            yield return null;
        }
    }

У кого-нибудь есть идеи?почему возникает эта проблема или у кого-то есть лучшая идея для поиска объекта?Поскольку я создаю объект во время выполнения, я чувствую, что у меня нет другого выбора, кроме GameObject.Find.Любая помощь будет оценена.Спасибо!

Примечание: Я пытался найти объект в Start и OnLevelWasLoaded.Оба они не работали.

Я зарегистрировал каждый игровой объект в иерархии, используя это:

        foreach (GameObject obj in Object.FindObjectsOfType(typeof(GameObject)))
        {

                Debug.Log(obj.name);
        }

При начальной загрузке my созданный мной игровой объект регистрируется, но после перезагрузки сцены мойобъект не загружен.

Я действительно нашел источник проблемы.Я менял родителя моего объекта с null на другой объект, и, очевидно, это вызывает проблему.Тем не менее, я не знаю, как это исправить, потому что я должен изменить родителя, я не могу изменить эту логику.

1 Ответ

0 голосов
/ 29 января 2019

Я действительно нашел решение.Я не понимал, что проблема вызвана из-за смены родителя, когда я задал вопрос.

DontDestroyOnLoad работает только для корневых GameObjects

Поэтому, когда я добавил родителя в мой объект, мой объект уничтожается.Одного только родительского обнуления было недостаточно.DontDestroyOnLoad должно быть применено снова.Решение, которое я нашел, было таким:

void ResetScene()
{ 
    test.transform.parent = null;
    DontDestroyOnLoad(test);
    StartCoroutine(LoadScene());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...