2017-03-08 33 views
0

私はゲームオブジェクトを3つのポイントの間で前後に移動しようとしています。これはC#で統一されています。私はユニティインスペクタで3つのゲームオブジェクトを割り当てました。エナミーゲームオブジェクトが前後のポイント間を移動します。パトロール。問題は、私は範囲外のエラーのインデックスを取得することです。それはなぜですか、どうすれば修正できますか? 文法的な出来事を申し訳ありません。インデックスから範囲外のエラーが発生するのはなぜですか?

public class Enamy2 : MonoBehaviour { 

    public Transform[] pointPosition; 
    public float enamySpeed; 
    private int currentPoint; 
    private bool backTracking = false; 


    // Use this for initialization 
    void Start() { 
     transform.position = pointPosition [0].position; 
     currentPoint = 0; 

    } 

    // Update is called once per frame 
    void Update() { 
     if (transform.position == pointPosition[currentPoint].position) { 
      if (backTracking) 
       currentPoint--; 
      else 
       currentPoint++; 
     } 
     if(currentPoint >= pointPosition.Length) { 
      backTracking = true; 
     } 
     transform.position = Vector3.MoveTowards (transform.position, pointPosition [currentPoint].position, Time.deltaTime * enamySpeed); 
    } 

}

答えて

1

IndexOutOfRangeExceptionは、インデックスが大きすぎるか小さすぎる2つのケースで発生します。 C#で負のインデクサを使用することはできません。

if(currentPoint >= pointPosition.Length) { 
     backTracking = true; 
     currentPoint = pointPosition.Length - 1; 
    } 

今、あなたが直接、その後、これを追加する必要があります:あなたはこの持ち

if(currentPoint <= 0) { 
     backTracking = false; 
     currentPoint = 0; 
    } 

を境界位置にcurrentPointをクランプするための追加の行は次の行が呼び出される前に、それが境界内にあることを保証します。

この時点でIndexOutOfRangeExceptionが得られるのは、pointPosition []が空で要素がないためです。

1

あなたcurrentPointが大きくなりすぎ:

は、ここに私のコードです。

if(currentPoint >= pointPosition.Length) { 
    backTracking = true; 
} 

しかしtruebackTrackingの設定の横に、あなたはそれについて何もしないし、あなたの次の行にあなたがpointPosition[currentPoint]を使用している:あなたもチェックしています。それがpointPosition.Length以上になると、範囲外です。

+0

私はどのようにスクリプトを修正する必要がありますか?私は統一とC#を1週間だけ行ったので、私にとっては難しいです... –

+0

if文の中で 'currentPoint'をリセットする必要があります。例: 'backTracking = true; currentPoint = 0; 'または、backTrackingを別の方法で処理します。 –

+1

実際には、 'currentPoint'が決して負でないことを確かめなければなりません。 'currentPoint'が0になった場合、backTrackingをオフにするif文を追加します。 –

関連する問題