Ich habe eine Auswahl an Tasten und ein 360-Grad-Video hängt davon ab, welche Taste Sie auswählen. Ich möchte, dass der Benutzer den Raycast für 5 Sekunden auf dem Button hat, bevor das nächste Video abgespielt wird.Coroutine wird nicht gestoppt Unity
Dies scheint in Ordnung zu sein, aber ich brauche die Coroutine zu stoppen, wenn der Strahl nicht auf der Schaltfläche ist. Ich habe versucht, die Coroutine zu stoppen, wenn der Strahl nicht auf dem richtigen Menüpunkt ist, aber es geht weiter. Dies ist, was ich bisher versucht:
public Coroutine coroutine;
void Update()
{
//create the ray to cast forward
RaycastHit hit;
Vector3 origin = transform.position;
Vector3 direction = transform.forward;
Ray ray = new Ray(origin, direction);
Debug.DrawRay(origin, direction * 100, Color.blue);
if (Physics.Raycast(ray, out hit))
{
objectCollided = hit.collider.gameObject.name;
hasHit = true;
if (objectCollided == "goForwardCube")
{
coroutine = StartCoroutine(WaitAndPrint());
}
else if (objectCollided != "goForwardCube")
{
StopCoroutine(coroutine);
}
}
IEnumerator WaitAndPrint()
{
// suspend execution for 5 seconds
ButtonControl.forwardCube.GetComponent<MeshRenderer>().material.color = Color.clear;
forwardText.text = "5";
yield return new WaitForSeconds(1);
ButtonControl.forwardCube.GetComponent<MeshRenderer>().material.color = Color.blue;
forwardText.text = "4";
yield return new WaitForSeconds(1);
ButtonControl.forwardCube.GetComponent<MeshRenderer>().material.color = Color.clear;
forwardText.text = "3";
yield return new WaitForSeconds(1);
ButtonControl.forwardCube.GetComponent<MeshRenderer>().material.color = Color.blue;
forwardText.text = "2";
yield return new WaitForSeconds(1);
ButtonControl.forwardCube.GetComponent<MeshRenderer>().material.color = Color.clear;
forwardText.text = "1";
yield return new WaitForSeconds(1);
videoPlayer.url = "Assets/Videos/1(360).mp4";
ButtonControl.DisableButtons();
videoPlayer.Play();
}
Auch dies seit der Umsetzung scheint es eine lange Pause vor den nächsten Videospielen zu sein und es scheint ziemlich laggy. Gibt es eine Möglichkeit, dies zu verbessern?
HINWEIS: Sie könnten auch "bereitsStarted = false;" in einer 'else' Aussage des "if (Physics.Raycast (ray, out hit))" –