2017-06-21 69 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