2017-06-21 47 views
-3

我有一個列表卡列斯BuildPositions。當我試圖刪除一個,它刪除整個列表,並給我錯誤:參數超出範圍。參數超出範圍,同時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