Страница 1 из 1

Про циклы

СообщениеДобавлено: 10 янв 2021, 07:57
labinzevvAlex
Привет Народ! Помогите решить вопрос:
есть массив, который заполняется объектами с тегом, через цикл при старте сцены.
Потом, объекты постепенно из сцены удаляются (из массива тоже соответственно).
Нужно сделать так, чтобы когда этих объектов стало ноль, сцена перезагрузилась.
Как это организовать.
Вот сам цикл:

Синтаксис:
Используется csharp
public class onGame : MonoBehaviour
{
    public GameObject[] mFind;

    void Update()
    {
        mFind = GameObject.FindGameObjectsWithTag("characters");

        for (int i = 1; i < mFind.Length; i++)
        {
            if (i <= 0)
            {
                SceneManager.LoadScene("stage1");
            }
        }      
    }
}

Re: Про циклы

СообщениеДобавлено: 10 янв 2021, 09:20
1max1
if (mFind.Length == 0)

Re: Про циклы

СообщениеДобавлено: 10 янв 2021, 09:31
labinzevvAlex
1max1 писал(а):if (mFind.Length == 0)

Благодарю!

Re: Про циклы

СообщениеДобавлено: 11 янв 2021, 16:08
UncleJey
Очень хочется верить что это вы не тестовое задание делаете. Один только этот кусок кода сразу в минуса безвозвратно рейтинг вгонит.

1. Не стоит использовать циклы если у вас объекты на сцене уничтожаются или размер массива меняется. Если во время перебора размер изменится, то выпадет исключение.
2. Используйте обратный перебор. Это более оптимально. Потому как итератор цикла каждую итерацию запрашивает размер массива, что увеличивает накладные расходы.
3. Каждый кадр искать элементы - ооооочень плохая практика. Find весьма прожорлив на ресурсы

Вам стоит сделать контроллер ресурсов, который будет хранить в себе все экземпляры, создавать, уничтожать, генерировать события.
Ну и использовать List а не массив. Он для этой задачи больше подходит.

Re: Про циклы

СообщениеДобавлено: 23 янв 2021, 09:03
MrDmitry
я бы сделал проще, создал статичный скрипт, в котором был бы статичный лист в котором хранился Список(List<GameObject>) со всеми объектами которые создаются и которые планируется удалять. На самих объектах вешал бы скрипт

Синтаксис:
Используется csharp
...
private void OnDestroy()
{
 ИмяСкриптаСоСписком.ИмяСписка.Remove(gameObject);
}