繁体   English   中英

Unity3D ArgumentOutOfRangeException:索引超出范围

[英]Unity3D ArgumentOutOfRangeException: Index was out of range

我的代码有问题。 当我尝试拾取对象时,编译器将在此行停止。

ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];

ArgumentOutOfRangeException:索引超出范围。 必须为非负数并且小于集合的大小。

if ( Input.GetKeyDown (KeyCode.Q))
{
    IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;
    for (int i = 0; i < ekwipunek.ListaNaszychPrzedmiotow.Count; i++)
    {
        if (ekwipunek.ListaNaszychPrzedmiotow[i].id == 0 && DoPodniesienia != null)
        {
            ekwipunek.ListaNaszychPrzedmiotow[i] = BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu];
            Destroy(DoPodniesienia);
            DoPodniesienia = null;
         }
     }
}

存在您的问题的可能性很大,因为您在此行上的索引之一引用了超出集合范围的内容。

您正在设置此变量,用作ID的索引。

 IdPrzedmiotu = DoPodniesienia.GetComponent<PrzedmiotPodniesienie>().id;

然后,您将在不验证它在集合中可用的情况下进一步引用它。

 BazaDanych_Eq.ListaPrzedmiotow [IdPrzedmiotu]

您需要先验证此值或此集合,然后再访问它。


未来的调试提示: ArgumentOutOfRangeException

  • 检查您正在使用的任何收藏的数量
  • 检查将用于引用集合的任何索引的值

public class YourClass
{
    ...
    Debug.Log($"The collection \"ListaNaszychPrzedmiotow\" is {ListaNaszychPrzedmiotow.Count()}");
    Debug.Log($"The index value of \"i\" is {i}");
    ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM