unity3d 我不明白这个Unity编辑器OutOfRangeException

deikduxw  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(135)

这是我在Unity控制台看到的。
ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。参数名称:index System.Collections.Generic.List1[T].get_Item(System.Int32 index)(at<4ba27aa039714eafa1e8892e51af2932>:0)GameManagerOneHundred.myHandStrength()(at Assets/GameManagerOneHundred.cs:1146)GameManagerOneHundred.smartBot()(at Assets/GameManagerOneHundred.cs:1154)FunctionTimer.Update()(at Assets/FunctionTimer/Scripts/FunctionTimer.cs:76)FunctionTimer+MonoBehaviourHook.Update()(at Assets/FunctionTimer/Scripts/FunctionTimer.cs:53) 有人能破译吗? 我不明白是什么索引出故障了。 什么是index System.Collections.Generic.List'1[T]? 我可以使用(at <4ba27aa039714eafa1e8892e51af2932>:0)`进行调试吗?
我正在调试,但我不知道bug在哪里!

insrf1ej

insrf1ej1#

这里有一个调用堆栈,它列出了代码中的一系列步骤(方法调用其他方法),以达到导致OutOfRangeException的有问题的调用。
我们来分析一下。首先是冒犯的部分:

ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index System.Collections.Generic.List'1[T].get_Item (System.Int32 index)

这只是表明你的代码中有一个List<T>,你试图通过索引访问它的值,但是这个索引不存在。
它提到了get_Item,因为这是像myList[i]这样的索引器的调用:myList.get_Item(i)
所以错误说“嘿,你正在使用的索引无效。有效的索引是0或更大,但不大于最后一个元素的索引”。
这很有用,但还不是很好,因为它没有告诉我们从哪里得到这个值。

GameManagerOneHundred.myHandStrength () (at Assets/GameManagerOneHundred.cs:1146)

它告诉你你试图在GameManagerOneHundred脚本中访问该元素。特别是在myHandStrength()方法中。更详细地说,你在该脚本的第1146行这样做了。
很好,现在我们知道该去哪里找了。在某些情况下,这可能是一个方法,你从不同的位置调用,采取不同的步骤来到达那个调用。在这种情况下,查看堆栈的其余部分可能会有所帮助。同样,每个位只是告诉你在哪里进行了调用,以及在哪一行。
所以你的情况是
FunctionTimer.Update() -〉GameManagerOneHundred.smartBot() -〉GameManagerOneHundred.myHandStrength() -〉Item access EXPLOSION
所以现在就看你来检查这个调用是怎么回事了。也许你的列表是空的,而你不希望它是空的?或者也许你试图访问第三个值,而它只有2个。

相关问题