在列表中使用 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# [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Python 操作Redis

python爬虫入门----- 阿里巴巴供应商爬虫

Python词典设置默认值小技巧

《python学习手册(第4版)》pdf

Django settings.py 的media路径设置

Python中的赋值,浅拷贝和深拷贝的区别