Unity中的异常超出范围



我在Unity中创建了一个游戏。我得到了这个错误:

System.ThrowHelper.ThrowArgumentOutOfRangeException (System.ExceptionArgument argument, System.ExceptionResource resource)

这是我的短代码:

public class OnlineGame : MonoBehaviour
{
private List<GameObject> domino = new List<GameObject>(7);
public void Start()
{
StartGame();
}
private void StartGame()
{
for (int i = 0; i < 7; i++)
{ 
domino[i] = Instantiate(dominoPrefab, new Vector3(11, 0, 0), Quaternion.identity) as GameObject;
}
}
}

如果您需要更多详细信息,请写一条评论。感谢的帮助

private List<GameObject> domino = new List<GameObject>(7)

new List<T>(int capacity)构造函数并不意味着生成的列表一开始就包含capacity对象。列表中元素的Count仍将为0。

当您在c#中使用List类时,它将为列表保留capacity内存。当你向列表中添加一些元素,并且它的Count达到capacity(或者接近它,我不太确定(时,列表会通过分配额外的内存来自动增加capacity,这样你就可以向列表中增加额外的元素。

通常,当您使用new List<T>()时,列表的初始容量为0,而程序不知道列表可能有多少Count,并会动态调整capacity以满足您的需求。

使用new List<T>(int capacity)就像告诉程序,列表最多将有capacity个元素,列表应该准备好capacity,以避免分配更多内存的开销。当然,当列表的Count达到capacity时,它也会增加。

要解决问题,请使用Add方法,而不是分配给阵列插槽。

public class OnlineGame : MonoBehaviour
{
private List<GameObject> domino = new List<GameObject>(7);
public void Start()
{
StartGame();
}
private void StartGame()
{
for (int i = 0; i < 7; i++)
{ 
// domino[i] = Instantiate(dominoPrefab, new Vector3(11, 0, 0), Quaternion.identity) as GameObject;
domino.Add(Instantiate(dominoPrefab, new Vector3(11, 0, 0), Quaternion.identity) as GameObject);
}
}
}

最新更新