Про циклы

Программирование на Юнити.

Про циклы

Сообщение labinzevvAlex 10 янв 2021, 07:57

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

Синтаксис:
Используется 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");
            }
        }      
    }
}
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Про циклы

Сообщение 1max1 10 янв 2021, 09:20

if (mFind.Length == 0)
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Про циклы

Сообщение labinzevvAlex 10 янв 2021, 09:31

1max1 писал(а):if (mFind.Length == 0)

Благодарю!
labinzevvAlex
UNIт
 
Сообщения: 74
Зарегистрирован: 12 июл 2020, 12:18

Re: Про циклы

Сообщение UncleJey 11 янв 2021, 16:08

Очень хочется верить что это вы не тестовое задание делаете. Один только этот кусок кода сразу в минуса безвозвратно рейтинг вгонит.

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

Вам стоит сделать контроллер ресурсов, который будет хранить в себе все экземпляры, создавать, уничтожать, генерировать события.
Ну и использовать List а не массив. Он для этой задачи больше подходит.
UncleJey
UNец
 
Сообщения: 8
Зарегистрирован: 20 сен 2012, 11:04

Re: Про циклы

Сообщение MrDmitry 23 янв 2021, 09:03

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

Синтаксис:
Используется csharp
...
private void OnDestroy()
{
 ИмяСкриптаСоСписком.ИмяСписка.Remove(gameObject);
}
MrDmitry
UNITрон
 
Сообщения: 223
Зарегистрирован: 05 авг 2017, 17:21


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7