2016-06-16 7 views
0

ich die Koroutine unten bin mit mehreren Objekten in einer Liste in meinem Spiel verschieben:wie kann ich aufhören Koroutine in Unity

IEnumerator moveObjToRight (Transform fromPosition, Vector3 toPosition, float duration, int newIndex) { 


     while (freePositions.Contains(objPositions[newIndex])) { 

     freePositions.Add (objPositions [newIndex - 1]); 
     filledPositions.Remove (objPositions [newIndex - 1]); 

     float counter = 0; 

    Transform startTrans = fromPosition; 

    freePositions.Remove (objPositions [newIndex]); 
    filledPositions.Add (objPositions [newIndex]); 

     while (counter < duration) {     
      counter += Time.deltaTime; 
      fromPosition.position = Vector3.Lerp (startTrans.position, toPosition, counter/duration); 
      yield return null; 

     } 


     if (newIndex < objPositions.Count) { 

      newIndex++; 

      if ((newIndex == 9) || !freePositions.Contains (objPositions [newIndex])) { 

      isMovingLeft = true; 

      yield return new WaitForSeconds (2.0f); 

      if (freePositions.Contains (objPositions [newIndex - 2])) { 

      toPosition = new Vector3(objPositions[newIndex - 2], startTrans.position.y, startTrans.position.z); 
      yield return StartCoroutine(moveObjToLeft(startTrans, toPosition, 1.0f, newIndex - 2)); 

ich es in der folgenden Art und Weise verwenden Anruf:

StartCoroutine(moveObjToRight(objs [objs.Count - 1].getObjGameObject().transform, new Vector3(objPositions[indexInObjPositions + 1], objPositionY, camera.nearClipPlane), 1.0f, indexInObjPositions + 1)); 

ich habe die folgende Fehlermeldung erhalten:

MissingReferenceException: The object of type 'Transform' has been destroyed but you are still trying to access it. 
Your script should either check if it is null or you should not destroy the object. 
UnityEngine.Transform.get_position() 

in meinem Spiel, in der Koroutine auf die Linie zeigen:

toPosition = new Vector3(objPositions[newIndex - 2], startTrans.position.y, startTrans.position.z); 

Ich glaube es ist, weil ich nicht die Koroutinen stoppe, wenn ich die Spielobjekte zerstöre. Wie kann ich die oben genannte Coroutine stoppen?

Antwort

1

können Sie entweder verwenden Sie den Befehl:

StopCoroutine(moveObjToRight); 

Bevor das Objekt zu zerstören, oder Sie können einen boolean als Flag verwenden, zu wissen, wann das Objekt am Leben oder zerstört ist, und wenn die Koroutine läuft oder nicht zu steuern.

bool alive = true; 

Ienumerator moveobj{ 
    if(alive){ 
    //run code 
    } 
} 

Destroy(object); 
alive = false; 
Verwandte Themen