Таймер для функций с любыми параметрами - PullRequest
0 голосов
/ 31 декабря 2018

Я работаю с единством, но в данном случае это просто вопрос ac #.Есть ли способ сделать таймер, который будет запускать любую функцию, с любыми параметрами?Я использовал делегаты, чтобы поместить функцию в класс таймера или сопрограмму, но я не могу понять, как поместить какие-либо параметры в делегат.

Кроме того, есть много вопросов, подобных моему, но разница (поскольку я не могу найти адресации, в частности то, что я спрашиваю), заключается в том, что я хочу иметь возможность запускать функцию, любую функцию, которую я хочунезависимо от того, какие параметры ему могут понадобиться, а какие могут и не понадобиться, по истечении заданного количества секунд.По сути, я хочу иметь возможность запустить сопрограмму, которая занимает время с плавающей запятой и функцию делегата.Он ждет секунд времени, а затем запускает функцию делегата.Но тогда я должен иметь возможность вводить параметры для функции, если она в этом нуждается, поэтому, если я хочу запустить простую функцию, которая выполняет

Debug.Log (comment)

послеполучение комментария в качестве строкового параметра или

Debug.Log (число)

после получения числа в качестве параметра с плавающей запятой.

Итак, чтобы подвести итог, как мне ждатьx секунд, чтобы выполнить функцию y и изменить значение y на любое другое, не создавая новый набор делегатов и функций?

Прошу прощения, если это дублирующий вопрос или легко доступная информация, так как яНе удалось найти ничего, что отвечало бы после часа поиска.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Кажется невозможным иметь столь гибкое решение, которое я хотел, но я обошел его, создав набор ноль / один / два / и т. Д.делегаты и сопрограммы параметров, поэтому, если я хочу подождать 5 секунд, чтобы запустить функцию с именем debugHello и поместить "hello" в качестве параметра для debugHello, я бы поместил debugHello в экземпляр делегата oneParamMeth с именем debugHelloMeth, а затем выполнил бы StartCoroutine (oneParamMethTimer (5, debugHellometh, "привет"));,Таким образом, по крайней мере с void-функциями, я могу задавать столько параметров, сколько мне нравится, если я создаю новую пару делегатов и сопрограмм для их использования.

РЕДАКТИРОВАТЬ: комментарий DerHugo работает намного лучше!Гораздо чище, чем у меня.

0 голосов
/ 31 декабря 2018

Я бы использовал лямбда-функции.

IEnumerator MyCoroutine(float delay, System.Action action)
{
    yield return new WaitForSeconds(delay);
    action();
}

, а затем

float number = 1.0f;
string comment;
StartCoroutine(MyCoroutine(0.5f, () =>
    {
        Debug.Log(number);
        Debug.Log(comment);
    });

Vector3 tmp = Vector3.zero;
StartCoroutine(MyCoroutine(1.0f, () =>
    {
        transform.position = tmp;
    });
...