Der Kern meiner Code Refactoring ist wie folgt:Probleme ein IEnumerator Verfahren mit mehreren Ausbeuten
// Play the first beat
audio.PlayOneShot(beat);
// Show 1st heartbeat border flash
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.1f, currentStress);
yield return new WaitForSeconds(0.1f);
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.5f, 0);
yield return new WaitForSeconds(interval);
// Play the second beat
audio.PlayOneShot(beat);
// Show 2nd heartbeat border flash
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.1f, currentStress);
yield return new WaitForSeconds(0.1f);
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.5f, 0);
yield return new WaitForSeconds(interval * 2);
Jetzt habe ich den obigen Code in einem einzigen IEnumerator Methode mit 2 Anrufe geteilt werden soll.
Das ist, was ich kam mit:
StartCoroutine(PlayBeat(currentStress, interval));
StartCoroutine(PlayBeat(currentStress, interval * 2));
// ...
IEnumerator PlayBeat(float currentStress, float interval)
{
audio.PlayOneShot(beat);
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.1f, currentStress);
yield return new WaitForSeconds(0.1f);
TweenAlpha.Begin(heartbeatPanel.gameObject, 0.5f, 0);
yield return new WaitForSeconds(interval);
}
Das Problem dabei, dass die Beats klingen mit ihrem richtigen Intervall statt heißt, beide Schläge am gleichzeitig klang und weil ich diese Anrufe in In einer Endlosschleife ist Unity abgestürzt, weil die Intervalle nicht berücksichtigt werden.
Was ist der beste Weg, um meine beiden sich wiederholenden Code-Blöcke oben in eine einzige IEnumerator-Methode zu extrahieren?
Ihr aktueller Code sieht gut aus (zumindest, ohne 'StartCoroutine' zu sehen) - was ist das Problem? –
Können Sie bitte genauer sein als "es funktioniert nicht", wenn Sie das Problem beschreiben. – ChrisF
Habe ich Recht, dass Sie die zwei Schläge auf einmal hören? – Kay