我'm making a menu for an Android 2d app, I have a bunch of UI panels in multiple menu' s当我按下右下角或左上角按钮时,脚本应该设置下一个面板激活并取消激活前一个面板,我认为列表应该有效 .
在Unity编辑器中,我将大小设置为4并将4个面板拖到脚本中,我收到此错误:
ArgumentOutOfRangeException:参数超出范围 . 参数名称:index
以下是脚本的相关部分:
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);
}
}
}
2 回答
根据您的评论和实际问题,我看到一个可能的问题 .
shipUpgradeSelected
的值永远不会增加 . 此外,shipUpgradeSelected
的初始值为零 .当
keyword
等于ShipUpgradeRight
或ShipUpgradeLeft
时,shipUpgradeSelected
的值减小(因此它小于零) . 然后,您尝试访问索引小于零的列表项 .但这是第一个问题 .
你也
shipUpgradeSelected
的 Value 't clamp (or don' . 例如,你有如果调用
Keyword("ShipUpgradeRight");
五次(例如),则shipUpgradeSelected
的值为5.并且它再次超出范围 . 所以你需要决定如何限制这个变量的值 .这段代码很完美:
但如果我重新开始,我会这样做:
感谢walther和d12frosted帮助我解决问题