Вам нужно будет инвертировать чек:
private void Update()
{
// Since Find is always a bit expensive I would do the cheapest check first
if(currenObjective > 0 && currenObjective < 3)
{
var allLights = GameObject.FindGameObjectsWithTag("Light");
var allActive = true;
for (int i = 0; i < allLights.Length; i++)
{
if (!allLights[i].activeInHierarchy)
{
allActive = false;
break;
}
}
if (allActive)
{
currentObjective = 2;
}
}
}
Или вы можете сделать это в одной строке, используя Linq All
using System.Linq;
...
private void Update()
{
// Since Find is always a bit expensive I would do the cheapest check first
if(currenObjective > 0 && currenObjective < 3)
{
var allLights = GameObject.FindGameObjectsWithTag("Light");
if (allLights.All(light => light.activeInHierarchy))
{
currentObjective = 2;
}
}
}
Общее примечание: вам следует избегать использования FindGameObjectsWithTag
в каждом кадре! Либо сохраните эти ссылки ONCE при запуске, либо, если вы создадите больше источников света во время выполнения, реализуйте его на основе событий и добавьте вновь созданные источники света в список, а затем используйте этот список для проверки.