TL, DR: Ist es sicher, Time.deltaTime als Wartezeit für die Ausbeute in einer Coroutine zu verwenden?Unity3D - Time.deltaTime als Wartezeit für eine Coroutine verwenden
Um unnötige Logik in Update() für kurzlebige Funktionalität zu vermeiden, werde ich oft eine Coroutine ausführen. Zum Beispiel habe ich in meinem Spiel eine langsame Coroutine, die regelmäßig die Distanz zwischen NPCs und dem Spieler überprüft, wenn diese Distanz unter einer Schwelle liegt, werde ich dann eine häufigere Coroutine mit teureren Sichtlinien-Tests mit Raycasting usw. durchführen viel effizienter als alles in Update() ständig zu überprüfen.
Meine Frage ist: Ist es sicher, Time.deltaTime als Wartezeit für die Ausbeute zu verwenden, und dabei Update() für die Dauer der Coroutine zu simulieren? Das ist, wenn der nächste Frame länger dauert als der letzte - wird die Coroutine bis zum nächsten Frame verzögert, oder ist etwas Schreckliches passiert, so wie der ganze Frame verzögert wird, bis die Coroutine fertig ist? Ich bin versucht, einen Puffer für die Sicherheit zuzulassen, z.B. yield return new WaitForSeconds(Time.deltaTime * 1.2f);
aber im Idealfall würde ich gerne genau jeden Frame ausführen.
th Das ist ** total, komplett, falsch **. Sie verwenden einfach "Aufrufen" für einfache Timer in Unity. – Fattie
Verwenden Sie einfach "yield return null", um einen Frame zu überspringen. tue zehn davon, um zehn Frames zu überspringen. oder einfach überspringen sagen "eine halbe Sekunde". aber wenn es aus irgendeinem Grund eine lange Zeit dauerte, * ein paar Entfernungen zu überprüfen, dann machst du etwas unglaublich falsch. Berücksichtige die gewaltige Menge an Berechnungen, die Unity machen muss, um Dinge auf den Bildschirm zu rendern und physikalische Berechnungen durchzuführen !!Was Sie tun, ist "nichts" (es sei denn, etwas ist drastisch falsch). Es sind also alles gute Nachrichten. Du musst dir keine Sorgen machen! – Fattie
http://www.unitygeek.com/coroutinets-in-unity3d/ das erklärt sehr gut –