Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в Unity!

Guaeshe Ученик (174), открыт 3 недели назад
При работе с Unity возникла ошибка: Index was outside the bounds of the array.
 using System.Collections; 
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Game : MonoBehaviour
{
[SerializeField] int Score;
public int[] CostInt;
private int ClickScore = 1;
public int[] CostBonus;

public GameObject ShopPan;
public GameObject BonusPan;

public Text[] CostText;
public Text ScoreText;

private void Start()
{
StartCoroutine(BonusShop());
}

public void OnClickButton()
{
Score += ClickScore;
}
private void Update()
{
ScoreText.text = Score + "$";
}
public void ShowAndHideShopPan()
{
ShopPan.SetActive(!ShopPan.activeSelf);
}
public void ShowAndHideBonusPan()
{
BonusPan.SetActive(!BonusPan.activeSelf);
}

public void OnClickBuyLevel()
{
if (Score >= CostInt[0])
{
Score -= CostInt[0];
CostInt[0] *= 2;
ClickScore *= 2;
CostText[0].text = CostInt[0] + "$";
}
}

public void OnClickBuyBonusShop()
{
if (Score >= CostInt[1])
{
Score -= CostInt[1];
CostInt[1] *= 2;
CostBonus[0] += 2;
CostText[1].text = CostInt[0] + "$";
}
}


IEnumerator BonusShop()
{
while (true)
{
Score += CostBonus[0];
yield return new WaitForSeconds(1);
}

}
}
1 ответ
Sergio 2.1 Оракул (67281) 3 недели назад
Убедитесь, что массивы инициализированы правильным размером:
 public int[] CostInt = new int[2];  // Минимум 2 элемента 
public int[] CostBonus = new int[1]; // Минимум 1 элемент
public Text[] CostText = new Text[2]; // Минимум 2 элемента
Исправьте опечатку в методе OnClickBuyBonusShop:
 public void OnClickBuyBonusShop()  
{
if (Score >= CostInt[1])
{
Score -= CostInt[1];
CostInt[1] *= 2;
CostBonus[0] += 2;
CostText[1].text = CostInt[1] + "$"; // Было CostInt[0], исправлено на CostInt[1]
}
}
Добавьте проверки на null и валидность индексов:
 private void Start()  
{
// Проверка инициализации массивов
if (CostInt == null || CostInt.Length < 2 ||
CostBonus == null || CostBonus.Length < 1 ||
CostText == null || CostText.Length < 2)
{
Debug.LogError("Arrays not properly initialized!");
return;
}

StartCoroutine(BonusShop());
}
GuaesheУченик (174) 3 недели назад
Теперь пишет Arrays not properly initialized!
Похожие вопросы