【发布时间】:2015-01-31 15:50:23
【问题描述】:
我正在为 Android 2d 应用程序制作菜单,我在多个菜单中有一堆 UI 面板,当我按下下一个 right 或上一个 left 按钮时脚本应该将下一个面板设置为活动并停用前一个面板,我尝试使用带有游戏对象的公共类来执行此操作,但这不起作用,并且认为列表应该起作用。
在 Unity 编辑器中,我将大小设置为 4 并将 4 个面板拖到脚本中 我收到了这个错误:
ArgumentOutOfRangeException:参数超出范围。 参数名称:索引
这是脚本的相关部分:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class MenuControl : MonoBehaviour
{
//Buttons
public GameObject ShipUpgradeRight;
public GameObject ShipUpgradeLeft;
//Ships
private int shipUpgradeSelected = 0;
List<GameObject> ShipList = new List<GameObject>();
public void Keyword (string keyword)
{
if (keyword == "ShipUpgradeLeft") {
shipUpgradeSelected--;
ShipList[shipUpgradeSelected].SetActive (true);
ShipList[shipUpgradeSelected+1].SetActive (false);
}
if (keyword == "ShipUpgradeRight") {
shipUpgradeSelected--;
CheckShip ();
ShipList[shipUpgradeSelected].SetActive (true);
ShipList[shipUpgradeSelected-1].SetActive (false);
}
}
}
【问题讨论】:
-
首先,我没有看到您在任何地方填充列表...其次,我没有看到您尝试限制值。像这样,您有机会尝试访问索引中不存在的项目。尝试完成调试过程,您会很容易明白我的意思...
-
Walther,填充你的意思是我应该使用 ShipList.Add 吗?但是在统一编辑器中,我将大小设置为 4,我得到了 4 个元素,我将这些元素分配给了游戏对象
-
如果你有它由编辑器填充,没关系,但你绝对应该尝试通过各种状态,看看你试图在你的方法中访问哪些索引。特别是边界值。这就是导致您的问题的原因:)
标签: c# list unity3d gameobject