Проблема исходит из вашего цикла for
. Посмотрите внимательно на то, что вы написали. Для каждого элемента вашего списка вы проверяете, является ли цвет его компонента SpriteRenderer зеленым. Если это так, вы устанавливаете _greenComplete
в true, в противном случае вы устанавливаете его в false.
Теперь давайте посмотрим на ваши два списка и попробуем применить этот алгоритм к каждому из них. Для первого списка:
- Первый элемент желтый.
_greenComplete
установлено значение false.
- Второй элемент зеленый.
_greenComplete
установлено значение true.
- Третий элемент красный.
_greenComplete
имеет значение false.
- Четвертый элемент зеленый.
_greenComplete
установлено значение true.
Вы видите, в чем сейчас проблема? Вы не определяете, содержит ли ваш список зеленый элемент. Вы последовательно определяете, зеленый ли последний проанализированный элемент. Как мы только что видели для вашего первого списка, в конце окончательный результат верен, потому что последний элемент вашего списка зеленый. Глядя на ваш второй список:
- Первый элемент зеленый.
_greenComplete
установлено значение true.
- Второй элемент зеленый.
_greenComplete
установлено значение true.
- Третий элемент красный.
_greenComplete
установлено значение false.
- Четвертый элемент желтый.
_greenComplete
имеет значение false.
Ваш список содержал два зеленых элемента, но последний проанализированный элемент не был зеленым, что привело к ложному значению, которое вы получили в конце.
Чтобы исправить свой код и получить реальный ответ, который вы хотите, вы предпочитаете цикл while
, который остановится, как только вы найдете зеленый элемент, отличный от зеленого в вашем списке (вы начинаете предполагать, что все элементы зеленые, действительно зеленые , и проверьте, если это не так):
void Update()
{
int i = 0;
_greenComplete = true;
while(i < ChildTiles.Count && _greenComplete)
{
if (ChildTiles [i].GetComponent<SpriteRenderer> ().color != Green)
{
_greenComplete = false;
}
i++;
}
Debug.Log (gameObject + "Green Complete " + _greenComplete);
}
Вы также можете использовать LINQ для этого вопроса:
_greenComplete = ChildTiles.All (c => c.GetComponent<SpriteRenderer> ().color == Green);
person
Isuka
schedule
17.09.2017