You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中如何按名称访问多个对象?ArgumentOutOfRangeException报错如何解决

问题解决方法

你收到的ArgumentOutOfRangeException是访问List元素时,索引值超出了列表的有效范围(0到Count-1)导致的,报错栈已经指向了LevelManager.cs第27行的List取值操作,也就是你代码里oList[a]这一行,具体问题和修正方案如下:

错误点说明

  • for循环终止条件逻辑错误
    你写的i == oList.Count不符合循环遍历的逻辑:正常遍历List所有元素的终止条件应为i < oList.Count。原有写法只有当i和列表长度完全相等时才会进入循环,i初始值为0,只有列表长度为0时才会进入一次循环,其余情况要么完全不执行,要么进入循环时i已经等于列表长度,此时取对应索引的元素直接越界。
  • 循环索引变量使用错误
    你在循环内没有使用定义的循环变量i,而是使用了外部变量a:如果a的初始值不在0~oList.Count-1的范围内,或者在循环多次执行后a自增到大于等于oList.Count,就会直接触发索引越界。

修正后代码

// 遍历oList所有元素
for(int i = 0; i < oList.Count; i++)
{
    // 直接用循环变量i做索引,不需要额外的a变量
    GameObject.Find(oList[i]).GetComponent<Image>().color = GreenCol;
}

优化建议

  • 尽量不要在循环内调用GameObject.Find,这个接口性能开销很高,建议提前把oList里存的名称对应Image组件缓存到列表里,直接遍历修改即可。
  • 如果oList本身存的就是GameObject对象,不需要用名称查找,直接调用oList[i].GetComponent<Image>()即可,性能更高也不会出现查找不到对象的空引用问题。

内容的提问来源于stack exchange,提问作者efkansenol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 02:57:01