Answers:
另外,有一种使用模数的线:
void Update()
{
//if you want it loop from specific start time rather than from start of the game,
//subtract said time value from Time.time argument value
if(Mathf.Repeat(Time.time, execDuration + sleepDuration) < execDuration)
executeFunction();
}
%
操作员经常用多种语言行事-要么不使用浮点数,要么在数学意义上给出了模数运算的意外或完全错误的结果(反映了硬件的本质整数运算)。Repeat()
选择它作为一种更安全的选择,以避免需要%
在C#/ mono 中查找运算符的确切实现。
我尚未测试以下代码,但是您会明白的:
public float wakeUpDuration = 10.0f ;
public float sleepDuration = 2.0f;
private bool callFunction = true ;
private float time = 0 ;
void Update()
{
time += Time.deltaTime;
if( callFunction )
{
if( time >= wakeUpDuration )
{
callFunction = false;
time = 0 ;
}
else
{
foo(); // Your function
}
}
if( !callFunction && time >= sleepDuration )
{
callFunction = true;
time = 0 ;
}
}
deltaTime
相对较短的情况下才有效。如果增量大sleepDuration
于此长度,则将失败。
您也可以使用协程进行此操作。就像是
public class Comp : MonoBehaviour
{
private bool _shouldCall;
Start()
{
StartCoroutine(UpdateShouldCall)
}
Update()
{
if(_shouldCall)
CallTheFunction();
}
IEnumerator UpdateShouldCall()
{
while(true)
{
_shouldCall = true;
yield return new WaitForSeconds(10);
_shouldCall = false;
yield return new WaitForSeconds(2);
}
}
}
Repeat()
和%
(模数)之间有区别吗?文档说:“这类似于模运算符,但它适用于浮点数”,但模数适用于浮点数...