Есть проект на unity. Суть в том, что при подгрузки нового(второго) уровня из префаба старый(первый) уровень с тегом Level я должен удалить. Делаю я это следующим образом:
GameObject[] objects = GameObject.FindGameObjectsWithTag("Level");
foreach (GameObject item in objects)
{
Destroy(item);
Debug.Log("Destroy1");
}
objects = GameObject.FindGameObjectsWithTag("Respawn");
foreach (GameObject item in objects)
{
Destroy(item);
Debug.Log("Destroy2");
}
hero.level = Instantiate(AssetDatabase.LoadAssetAtPath(string.Format("Assets/Resources/Levels/{0}lvl.prefab",hero.lvl), typeof(GameObject))) as GameObject;
hero.level.transform.position = new Vector3(0, 0, -1);
Debug.Log(GameObject.FindGameObjectsWithTag("Level").Length);
hero.gameObject.transform.position = GameObject.FindWithTag("Respawn").transform.position;
Но, в результате мой hero падает на первом уровне на старое место, ну, то есть на первый Respawn Что делать - ума не приложу, ибо испробовал уже практически всё, что есть. Спасибо)
UPD: Ещё что хотелось бы отметить - сами объекты скрываются, то есть происходит реально ощущение, что всё удалилось, но программа так не думает.
Ну, для начала - не использовать FindWithTag
) трудно найти что-то более ненадежное и менее производительное.
Создайте класс GameLevel
и повесьте его на корневой объект ваших уровней. Задайте в этом классе поля со ссылками на все нужные вам на уровне вещи - например, на точку респауна (например, назовём её RespawnPoint
).
Создайте класс LevelManager
- путь он знает имена всех уровней и умеет их загружать и создавать в нужном месте. Пусть у него будет поле типа GameLevel
, и если на момент смены уровня оно не null - менеджер уничтожает объект из него, после чего загружает, создаёт и назначает в него же новый уровень, а затем спаунит героя в точке, на которую ссылается поле RespawnPoint
текущего GameLevel
.
Искать объекты на сцене через имя или теги нужно только в самом крайнем случае :) иначе всяческие непредвиденные ситуации будут у вас происходить довольно часто.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
стоит задача получения данных из COM портаНаписал код на C# для консольного приложения прямо по инструкции на MSDN и всё замечательно работает