Проблема происходит здесь:
void activeEpilepsy()
{
while(delay <= 0)
{
Epilepsy.SetActive(true);
delay -= Time.deltaTime;
}
Epilepsy.SetActive(false);
}
У вас есть цикл while, который будет работать до тех пор, пока задержка меньше 0. И вы уменьшаете это значение внутри. Так что либо задержка больше 0, и цикл не входит. Или оно меньше или равно 0 и никогда не уйдет.
Поскольку задержка равна 0,2f, цикл бесполезен, и объект сразу отключается. Вам нужен сопрограмма или другой вызов там:
void activeEpilepsy()
{
Epilepsy.SetActive(true);
Invoke("Reset", this.delay);
}
void Reset(){Epilepsy.SetActive(false);}
Это проблема неактивного объекта. Сбой, вероятно, в другом месте, я не вижу ничего, что работает здесь неправильно.
Для метода в виде строки речь идет не о вызове со строкой, а о том, как он обрабатывается. Я думаю (будет подтверждено) Invoke использует отражение, поэтому он вызывает манифест сборки, чтобы выяснить, существует ли метод. Это будет медленно. Если Unity был достаточно умен, чтобы добавить метод в словарь, то вызов по строке практически не влияет.