Не работает отложенный вызов функции через делегаты
Я длеаю игру на Unity и пишу функции атаки.
Суть кода в том, чтобы после нажатия кнопки через определённое время вызывалась функция нанесения урона. Когда атака была только одного типа, я справлялся с помощью Invoke("Hitting", time)
, но появилась атака другого типа со своими приколами, и теперь нужно положить в параметры обеих функций переменные и этот метод уже не катит.
Я попробовал задействовать Task с делегатами и вот что вышло:
public class Character : MonoBehaviour
{
...
delegate void DealingDamage(int damageType);
DealingDamage ddamage;
...
private void Attack()
{
if(Input.GetKeyDown(KeyCode.Mouse0))
{
...
int damageType = 0;
ddamage = Hitting;
Action action = () => ddamage(damageType);
Expectation(action, 750); // warning CS4014
}
}
public async Task Expectation(Action action, int timeout) // функция вызывается
{
await Task.Delay(timeout).ContinueWith(t => action);
}
private void Hitting(int damageType) //функция не вызывается
{
...
}
Проблема в том, что Expectation()
вызывается, а Hitting()
нет и при вызове первой вылезает ошибка.
В общем, что не так и как решить?
Источник: Stack Overflow на русском