我在 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;
}
}
}
如果您需要更多詳細資訊,請寫評論。感謝幫助
uj5u.com熱心網友回復:
private List<GameObject> domino = new List<GameObject>(7)
new List<T>(int capacity)建構式并不意味著結果串列將capacity在開始時保留物件。該Count串列中的元素仍然是0。
當您List在 c# 中使用類時,它將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);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/405079.html
標籤:
