我不明白这个Unity编辑器OutOfRangeException

问题描述 投票:0回答:1

这是我在统一控制台中看到的...

ArgumentOutOfRangeException:索引超出范围。必须是 非负且小于集合的大小。参数名称: index System.Collections.Generic.List`1[T].get_Item (System.Int32 指数)(在<4ba27aa039714eafa1e8892e51af2932>:0) GameManagerOneHundred.myHandStrength () (在 资产/GameManagerOneHundred.cs:1146) GameManagerOneHundred.smartBot () (在 Assets/GameManagerOneHundred.cs:1154) FunctionTimer.Update () (在资产/FunctionTimer/Scripts/FunctionTimer.cs:76) FunctionTimer+MonoBehaviourHook.Update()(at 资产/FunctionTimer/Scripts/FunctionTimer.cs:53)

有人能破译这个吗?

我不明白什么索引出了问题。

到底是什么

index System.Collections.Generic.List'1[T]

我可以使用

(at <4ba27aa039714eafa1e8892e51af2932>:0)
以某种方式进行调试吗?

我正在尝试调试,但我不明白错误在哪里!

unity3d c#-4.0 unity-editor
1个回答
1
投票

你有一个调用堆栈。它列出了在您的代码中采取的步骤序列(调用其他方法的方法)以到达导致

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 的第 3 个值。

© www.soinside.com 2019 - 2024. All rights reserved.