所以我有一個 Vector3 的串列,我想遍歷它,看看它是否等于另一個 Vector3。
我試過這樣做,但它不起作用我收到一個錯誤,說
索引超出范圍。必須是非負數且小于集合的大小。
這是我的代碼:
int n = GameManager.instance.blocks.Count;
while (n > 1)
{
if (GameManager.instance.blocks[n] == new Vector3(Mathf.RoundToInt(this.transform.position.x), Mathf.RoundToInt(this.transform.position.y), 0))
{
GameManager.instance.blocks.Remove(new Vector3(Mathf.RoundToInt(this.transform.position.x), Mathf.RoundToInt(this.transform.position.y), 0));
}
n--;
}
但是我得到了前面所說的錯誤,我會在這里改變什么?
謝謝
uj5u.com熱心網友回復:
您不應該將 n 設定為您的陣列大小,它必須是您的總專案大小的 n-1。
int n = GameManager.instance.blocks.Count-1;//last index is n-1
while (n >= 0)//0 is the first index
{
if (GameManager.instance.blocks[n] == new
Vector3(Mathf.RoundToInt(this.transform.position.x),
Mathf.RoundToInt(this.transform.position.y), 0))
{
GameManager.instance.blocks.Remove(new Vector3(Mathf.RoundToInt(this.transform.position.x), Mathf.RoundToInt(this.transform.position.y), 0));
}
n--;
}
uj5u.com熱心網友回復:
您不應該在 Unity 中使用“while”回圈。
Vector3 vectorToRemove = new Vector3(Mathf.RoundToInt(this.transform.position.x), Mathf.RoundToInt(this.transform.position.y), 0);
for(int i = GameManager.instance.blocks.Count - 1; i >= 0; --i)
{
if(GameManager.instance.blocks[i] == vectorToRemove) GameManager.instance.blocks.Remove(vectorToRemove);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/469045.html