在列表中使用 add 时出现 ArgumentOutOfRange 错误。 Unity C# [重复]
Posted
技术标签:
【中文标题】在列表中使用 add 时出现 ArgumentOutOfRange 错误。 Unity C# [重复]【英文标题】:ArgumentOutOfRange error when use add in the list. Unity C# [duplicate] 【发布时间】:2021-09-30 16:02:54 【问题描述】:它是 Unity C#。我的代码有问题。我的目标是将cubePositions
保留在我稍后将使用的列表中。我以一种奇怪的方式保持它。我使用了 Vector3,但它给了我同样的错误。我收到错误:ArgumentOutOfRange。我最好的猜测是该值替换了最后一个。此外,我所有的游戏对象都称为相同的。 print() 不是问题。
谢谢!!!
这是我的代码:
public class MapAccess : MonoBehaviour
List<float> cubePositionsX = new List<float>();
List<float> cubePositionsZ = new List<float>();
void Start()
foreach (GameObject cube in GameObject.FindGameObjectsWithTag("Cube"))
cubePositionsX.Add(cube.transform.position.x);
cubePositionsZ.Add(cube.transform.position.z);
print(cubePositionsX[0]);
print(cubePositionsX[1]); //The problem is here. Unity said that ArgumentOutOfRange
【问题讨论】:
您想要获取列表的第二个元素,尽管您只向列表添加了一个值 (x)。 y 被添加到另一个列表中 cubePositionsX 只有 1 个元素。 您只向cubePositionsX
添加了一个元素,因此您无法访问索引1
(这将是第二个元素)z
被添加到cubePositionsZ
并且可以通过以下方式访问cubePositionsZ[0]
【参考方案1】:
cubePositionsX
几乎完成第一次迭代时只有一个元素,您想在这里解决第二个问题:
print(cubePositionsX[1]);
首先添加它们,然后打印它们或访问它们!
foreach (GameObject cube in
GameObject.FindGameObjectsWithTag("Cube"))
cubePositionsX.Add(cube.transform.position.x);
cubePositionsZ.Add(cube.transform.position.z);
print(cubePositionsX[0]); // or print(cubePositionsX.ElementAt(0));
foreach (var item in cubePositionsX)
print(item);
问候
【讨论】:
是的,问题是,它不应该。我在游戏中有多个具有相同标签的对象,通过编写“print(cubePositionsX[1]”),我正在检查列表中是否有第二个对象。我不明白为什么第二个对象不去在列表中,并且一直只有一个。我是否以错误的方式取消了“foreach”?谢谢! @Maxim:首先添加项目,然后使用辅助循环或直接访问打印它们! (更新代码!)以上是关于在列表中使用 add 时出现 ArgumentOutOfRange 错误。 Unity C# [重复]的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试在 for Each (DART AND FLUTTER) 中使用 .add 时出现问题
使用谓词列表时出现 DataContract SerializationException