回答:
または、係数を使用するワンライナーがあります:
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();
}
%
演算子は奇妙に振る舞うことがよくあります-浮動小数点数では機能せず、数学的な意味でのモジュラス演算に予期しないまたはまったく間違った結果を与えます(ハードウェアの性質を反映しています)整数の演算)。C#/ mono Repeat()
で%
演算子の正確な実装を調べる必要を回避するために、より安全なオプションとして選択されました。
私は次のコードをテストしていませんが、あなたはアイデアを得るでしょう:
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()
と%
(係数)の間に違いはありますか?ドキュメントには「これはモジュロ演算子に似ていますが、浮動小数点数で機能します」とありますが、モジュラスは浮動小数点で機能します...