Почему Coroutine не выполняет ожидание с Action параметром. UNITY
У меня есть абстрактный класс который наследуют и реализуют другие классы, в этих классах я вызываю публичный метод абстрактного класса который возвращает IEnumerator, его сигнатура:
public IEnumerator ActionAfterDelay(float seconds, Action action)
Планируется что он должен выполнять action после seconds. В итоге я при вызове данного метода не получаю первый Debug.Log, и получает сразу выполнение действия и в консоле появляется второй Debug.Log. То есть я пропускаю данное ожидание, и не понимаю почему это происходит. Вот сам метод из абстрактного класса
public IEnumerator ActionAfterDelay(float seconds, Action action)
{
Debug.Log($"Wait before Action {seconds} seconds");
yield return new WaitForSeconds(seconds);
action.Invoke();
// пробовал и просто вызвать action(); - безуспешно
Debug.Log("Action TIME!");
}
Вот вызов данного метода из наследуемого класса, он вызывается в switch:
case SimpleInfluenceEffectType.Explosion:
StartCoroutine(ActionAfterDelay(0.25f, () =>
{
if (Target.CurrentGameObject.TryGetComponent(out EnemyState enemyState))
{
if (enemyState.IsDontExplode)
{
VisualEffect.Instance.InstantiateEffect(
Target.UnitState.transform.position,
VisualEffect.EffectType.ExplosionShield,
Target.UnitState.transform.transform,
true);
return;
}
}
VisualEffect.Instance.InstantiateEffect(Target.UnitState.transform.position, VisualEffect.EffectType.MobExplosion);
Target.UnitState.TakeDamage(EffectValue, gameObject);
}));
break;
Я где то ошибаюсь, и не могу найти решение
Ответы (1 шт):
Код рабочий, всё выполняет, вот только Визуал студио не записывал мои изменения в коде, и юнити использовал старый код где нет использования данного метода, от этого ничего и не происходило, есть много вопросов почему логи отправлялись, но всё это было решение перезапуском визуал студио и переписыванием кода.