2017-06-21 18 views
-3

リストを取得しましたBuildPositionsです。 1つだけ削除しようとすると、リスト全体が削除され、エラーが表示されます。引数が範囲外です。引数が範囲外です。List.RemoveAt

// Update is called once per frame 
public void FixedUpdate() 
{ 
    if (Sex) 
    { 
     if (House == null && Money >= 1500) 
     { 
      GameObject Builder = GameObject.FindWithTag("Builder"); 
      int LuckyHouse = Random.Range(0,Builder.GetComponent<BuildPoints>().BuildPositions.Count); 
      Builder.GetComponent<BuildPoints>().BuildPositions.RemoveAt(LuckyHouse); 
      House = Builder.GetComponent<BuildPoints>().BuildPositions[LuckyHouse]; 
      Money = Money - 1500; 
      GameObject HouseWall = House.transform.Find("Road_wall_Builder").gameObject; 
      GameObject House1 = House.transform.Find("House_1").gameObject; 
      HouseWall.active = false; 
      House1.active = true; 
     } 
    } 
} 
+0

何も残っていない限り、リスト内の項目を繰り返し実行していないことを確認してください。 – Serlite

+0

はい、それでした!ありがとうございました! – Yvoro

答えて

3

まず、FindWithTagを使用することは推奨されませんが、代わりにパブリック変数を作成してインスペクタでゲームオブジェクトを割り当てます。 transform.Findと同じです。私には、BuildPositions配列からLuckyHouseを削除してからスクリプトが機能しないようですが、次の行にアクセスしようとします。これらの順序を逆にして、変数を削除する前にアクセスするようにしてください。

+2

私はこの行を関数の最後に移動しました。 Builder.GetComponent ).BuildPositions.RemoveAt(LuckyHouse); あなたは私のコーディング方法について正しいです、私はそれに取り組んでいます!ありがとうございます! – Yvoro

+1

メソッドを複数回呼び出すのではなく、Builder.GetComponent ()に変数を割り当てることもお勧めします。 @Yvoro – Ariss

関連する問題