我正在制作Unity游戏,其中玩家正在收集有关外星人的数据。 因此,玩家指向外星人并使用类似相机的东西。
相机 - >射击雷 - > Ray返回附加到alien-gameobject上的脚本所需的所有数据
void ShootRay()
{
RaycastHit hitInfo; // stores information about hitted object
if (Physics.Raycast (transform.position, transform.forward, out hitInfo, maxRaycastRange, 1 << LayerMask.NameToLayer("creature"))) // out hitInfo = Unity puts information in the variable hitInfo
{
// UI alerts and collecting dna
if (hitInfo.distance <= photoRaycastRange)
{
distanceInfo.text = "scanning_genome";
if (hitInfo.collider.gameObject.GetComponent<EnemyAI> ().dna_collected == false) {
if (dna_percent_0_to_1 < 1)
{
calming_dna_scan_circle = false;
distanceInfo.text = "scanning_genome";
dna_percent_0_to_1 += Time.deltaTime * dna_scanSpeed;
dna_collect_circle.fillAmount = dna_percent_0_to_1;
}
else if (dna_percent_0_to_1 >= 1)
{
// adding info of creature to database
if (hitInfo.collider.gameObject.GetComponent<EnemyAI> ().raceIndex == 1)
{
if (!raceOneWasAdded)
{
BestiariumData.scannedSpecies.Add (hitInfo.collider.gameObject);
raceOneWasAdded = true;
}
BestiariumData.dnaBar_1 += 0.25f;
上述数据库只是一个名为BestiariumData的类,其中包含:
public static List<GameObject> scannedSpecies = new List<GameObject> ();
public static List<float> savedDNAFillRates = new List<float> ();
public static float dnaBar_1 = 0;
public static float dnaBar_2 = 0;
public static float dnaBar_3 = 0;
public static float dnaBar_4 = 0;
public static float dnaBar_5 = 0;
public static float dnaBar_6 = 0;
public static float dnaBar_7 = 0;
public static float dnaBar_8 = 0;
}
我有一个菜单,玩家可以检查他/她已经收集了哪些外星人的数据。显示外星人的名字(Monster One,......)以及玩家扫描了多少外星人的进度条。
问题: 如果我尝试分配状态栏的NAME,如果抛出 ArgumentOutOfRangeException:参数超出范围。参数名称:索引异常。我这样做是通过将另一个脚本中的bool设置为true来实现的。
public List<GameObject> monsterButtons = new List<GameObject>();
public static bool nameButtons = false;
// Update is called once per frame
void LateUpdate ()
{
if (nameButtons)
{
for (int buttonIndex = monsterButtons.Count; buttonIndex > 0; buttonIndex--)
{
monsterButtons [buttonIndex].GetComponentInChildren<Text> ().text = BestiariumData.scannedSpecies [buttonIndex].name;
}
}
}
感谢您的帮助。
答案 0 :(得分:1)
按钮索引显示列表的计数。所以说你的清单包含10个项目,数量将是10个。 但是,列表的索引从0开始,而不是1.
因此,当您第一次尝试访问monsterButtons [buttonIndex]时,您正在调用索引10,这意味着第11项。这不存在因此会引发您的错误。
要修复,请添加&#34; -1&#34;你的索引asigning:
for (int buttonIndex = monsterButtons.Count -1; buttonIndex >= 0; buttonIndex--)
{
monsterButtons [buttonIndex].GetComponentInChildren<Text> ().text = BestiariumData.scannedSpecies [buttonIndex].name;
}