ฉันมีฟังก์ชั่นเฉพาะที่ฉันกำลังเรียกใช้ในฟังก์ชั่นอัพเดท สำหรับสิบวินาทีแรกฟังก์ชั่นควรได้รับการเรียกในฟังก์ชั่นอัปเดตจากนั้นควรปิดการใช้งานสำหรับสองวินาทีถัดไปจากนั้นเปิดใช้งานอีกครั้งสำหรับสิบวินาทีถัดไป รอบนี้ควรทำซ้ำ ๆ ฉันจะรันมันได้อย่างไร
ฉันมีฟังก์ชั่นเฉพาะที่ฉันกำลังเรียกใช้ในฟังก์ชั่นอัพเดท สำหรับสิบวินาทีแรกฟังก์ชั่นควรได้รับการเรียกในฟังก์ชั่นอัปเดตจากนั้นควรปิดการใช้งานสำหรับสองวินาทีถัดไปจากนั้นเปิดใช้งานอีกครั้งสำหรับสิบวินาทีถัดไป รอบนี้ควรทำซ้ำ ๆ ฉันจะรันมันได้อย่างไร
คำตอบ:
อีกวิธีหนึ่งคือซับหนึ่งโดยใช้โมดูลัส:
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
นี้จะล้มเหลว
คุณสามารถทำได้ด้วย coroutine ด้วย สิ่งที่ต้องการ
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()
และ%
(โมดูลัส) หรือไม่? เอกสารบอกว่า"นี่คล้ายกับตัวดำเนินการโมดูโล แต่ทำงานได้กับตัวเลขจุดลอย"แต่โมดูลัสทำงานร่วมกับการลอย ...