Второй цикл for не работает внутри моего обновления - PullRequest
2 голосов
/ 20 октября 2019

Это оператор if в update () имеет 2 цикла for, но он запускается только первый после того, как условие if активировано, и я не знаю почему.

Я строюкод для оптимизации пути в единстве. В настоящее время я должен выяснить путь, который встретил узлы / точки / позиции с определенным массивом позиций, что индекс - это порядок следования пути. Некоторый путь между двумя узлами повторяется, например: от А до В и от В до А считается одним и тем же путем и должен сгущать ширину линии АВ, в конечном итоге отображаемой. Поэтому я попытался отсортировать массив позиций в 2 различных массива для сравнения, если какой-либо из пары узлов (или мы можем сказать, линия) повторяется. И я столкнулся с проблемой в операторе if внутри update ().

Первый должен отсортировать исходный массив для последующего сравнения. Второй только для тестирования, если первый делает свою работу. Сравнения пока нет. Однако после нажатия на кнопку play и выполнения оператора if я вижу все файлы Debug.log в первом, все нормально, сортировка нормальная, а во втором просто ничего не печатается.

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

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

    if (l > 0)//activate when we choose any preset processes
    {


        for (int n = 0; n <= positions.Length; n++)//this loop will sort all the pos1 and pos 2 into array for current frame
        {
            curPos_1 = positions[n];//current position of node 1
            curPos_2 = positions[n + 1];
            Debug.Log("CURPOS_1 of line number " + n + " is " + curPos_1);
            Debug.Log("CURPOS_2 of line number " + n + " is " + curPos_2);
            flag[n] = 0;

            Pos_1[n] = curPos_1;
            Pos_2[n] = curPos_2;
            Debug.Log("POS_1 array of line number " + n + " is " + Pos_1[n]);
            Debug.Log("POS_2 array of line number " + n + " is " + Pos_2[n]);
        }
        for (int o = 0; o <= positions.Length; o++)
        {
            Debug.Log("flag of number " + o + " is " + flag[o]);
        }
    }

Как описано, все для цикла должно что-то печатать. Не только один из них.

1 Ответ

2 голосов
/ 20 октября 2019

Вы проверили свое Unity Консольное окно ?

В первом цикле вы получите следующий элемент, но его состояние не будет выполнено приконец, т. е. отключен на один .

Правильный код должен выглядеть примерно так:

var floats = new float[100];

for (var i = 0; i < floats.Length - 1; i++)
{
    var f1 = floats[i];
    var f2 = floats[i + 1];
}

Теперь, Unity, имеет поведение ON ERROR RESUME NEXT, поэтомувесьма вероятно, что произошла ошибка, но вы ее не видели (вы выключили красный значок для переключения ошибок в консоли?).

Кроме того, для некоторых условий, о которых вам известно только (вы не сделали этого)опубликовать весь контекст), он может сработать один раз после того, как вы изменили какое-то состояние своей программы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...