Pickto
@Pickto

Почему код работает не в том порядке?

Есть такой код -
foreach (GameObject o in GameObject.FindGameObjectsWithTag("loc"))
            {
                Destroy(o);
            }
            Instantiate(GameObject.Find("Camera").GetComponent<LibLevels>().Levels[GameData.locID], new Vector3(), Quaternion.identity);
List<GameObject> Doors = new List<GameObject>(GameObject.FindGameObjectsWithTag("door"));
            for (int i = 0; i < Doors.Count - 1; i++)
            {
                GameObject g = Doors[i];
                if (GameData.isOpen[i])
                {
                    Debug.Log(g.name);
                    g.GetComponent<Door>().Open();
                }
            }

Изначально на сцене есть объект gate с тегом door, этот объект дочерен объекту "o" в
списке GameObject.FindGameObjectsWithTag("loc"), поэтому он должен уничтожаться до того как происходит GameObject.FindGameObjectsWithTag("door")). Instantiate(GameObject.Find("Camera").GetComponent().Levels[GameData.locID], new Vector3(), Quaternion.identity) Создает на сцене префаб где есть gate1 с тегом "door".
Проблема в том что на выводе Debug.Log(g.name) выдает gate ,а не gate1 как должно.При чем gate1 не выводиться в последствии.
В чем причина?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
GavriKos
@GavriKos Куратор тега Unity
Destroy не гарантирует моментальное уничтожение и обновление всего дерева объектов, поэтому Find может вернуть его в рамках того же Update.

Ну и я очень надеюсь что это не production код...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы