我正在团结,但是在这种情况下,这只是一个C#问题。有没有一种方法可以使计时器运行具有任何参数的任何功能?我一直在使用委托将函数放入计时器类或协程中,但是我不知道如何将任何参数放入委托中。
此外,还有很多问题,例如我的,但是区别(因为我找不到能明确解决我所要问的问题)的原因是,我希望能够运行一个函数,无论我想要什么函数,无论如何经过指定的秒数后,它可能需要或不需要什么参数。本质上,我希望能够运行需要浮动时间和委托函数的协程。它等待时间秒,然后运行委托函数。但是然后,如果需要,我需要能够为该函数输入参数,因此,如果我想运行一个简单的函数,可以做到这一点
Debug.Log(注释)
将注释作为字符串参数后,或
Debug.Log(数字)
将数字作为浮点参数后。
因此,总而言之,我如何等待x秒执行功能y,并将y更改为我想要的任何值,而不必创建一组新的委托和函数?
对于这是一个重复的问题,还是很容易获得的信息,我深表歉意,因为经过大约一个小时的搜索,我一直找不到任何答案。
答案 0 :(得分:0)
我会使用lambda函数。
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;
});
答案 1 :(得分:0)
拥有一个我想要的灵活解决方案似乎是不可能的,但是我通过创建一组零/一/二/等来解决了这个问题。参数委托和协程,因此,如果我想等待5秒钟以运行名为debugHello的函数并将“ hello”作为debugHello的参数,我会将debugHello放入一个名为debugHelloMeth的oneParamMeth的委托实例中,然后执行StartCoroutine(oneParamMethTimer(5 ,debugHellometh,“ hello”)); 。这样,至少使用void函数,只要我创建一对新的委托和协同程序,它们就可以执行任意多个参数。
编辑:DerHugo的评论效果更好!比我的清洁得多。