【问题标题】:ArgumentOutOfRange error when use add in the list. Unity C# [duplicate]在列表中使用 add 时出现 ArgumentOutOfRange 错误。 Unity C# [重复]
【发布时间】: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]

标签: c# list unity3d add


【解决方案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:首先添加项目,然后使用辅助循环或直接访问打印它们! (更新代码!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2017-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多