2016-06-16 7 views
0

数秒ごとにオブジェクトをある位置から別の位置に移動させるいくつかのコルーチンを実行しています。ある時点で、私は彼らの衝突を無効にしたいと思います。どのようにして、各ゲームオブジェクトが飛び越しの過程で衝突者を無効にするのを防ぐために、それを無効にする前に、新しい位置に 'lerping'を完了させることができますか?collider2dを無効にする前にlerpが終了したことを確認する方法

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)); 

       } 

       else if (!freePositions.Contains (objPositions [newIndex - 2])) { 
        yield return new WaitForSeconds (3.0f); 

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


       } 
      } 
     } 

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

     int waitTime = Random.Range (3, 5); 
     yield return new WaitForSeconds (waitTime); 

    } 
} 
+0

をlerpコードを提供しなければ、あなたのオブジェクトがlerping行われているときに我々は知ることができますか?あなたはここでは新しい人ではなく、コードなしであなたは妥当な助けを手に入れません。 – Programmer

+0

@Programmer質問を編集したばかりです: – Nullititiousness

+2

オブジェクトはwhileループブロックの実行が終了した後に移動します。 'while(counter Programmer

答えて

0
IEnumerator LerpWithCompletionAction(Action onCompletion){ 
    while(Vector3.Distance(this.transform.position, this.target.position)<0.001f)  
    { 
      // Lerp 
      yield return null 
    } 
    if(onCompletion != null) { onCompletion(); } 
} 

チェックはあなたが本当にフロート比較のためにチェックするに頼ることができないよう距離を使用しています。以下は、関連するコードです。チェック値を下げるか、あまりに早く起こったのか、あまりにも小さすぎるのではないのかを増やすことができます。

次に、あなたは次のように呼び出す:

void DisableColliders(){ // Disable your colliders } 

void AnyMethod() 
{ 
    StartCoroutine(LerpWithCompletionAction(DisableColliders)); 
} 
関連する問題