Top.Mail.Ru
Ответы
Аватар пользователя
8мес
Аватар пользователя
Аватар пользователя
Программирование
+1

Index was outside the bounds of the array! Unity ошибка!

При программировании возникла эта ошибка

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
 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[1] + "$"; 
        } 
    } 
 
 
    IEnumerator BonusShop() 
    { 
        while (true) 
        { 
            Score += CostBonus[0]; 
            yield return new WaitForSeconds(1); 
        } 
 
    } 
} 

Именно пишет: IndexOutOfRandeException: Index was outside the bounds of the array.
Game.OnClickBuyBonusShop () (at Assets/Scripts/Game.cs:54)

По дате
По рейтингу
Аватар пользователя
Оракул
8мес

Вам нужно правильно инициализировать массивы в инспекторе Unity или в коде:

12345678910
 public class Game : MonoBehaviour  
{  
    [SerializeField] int Score;  
    public int[] CostInt = new int[2]; // Минимум 2 элемента 
    private int ClickScore = 1;  
    public int[] CostBonus = new int[1]; // Минимум 1 элемент 
 
    // ... остальной код 
} 
 

Либо инициализировать их в методе Start():

1234567
 private void Start()  
{  
    CostInt = new int[2] { 10, 20 }; // Примерные значения 
    CostBonus = new int[1] { 0 }; 
    StartCoroutine(BonusShop());  
} 
 
Аватар пользователя
Просветленный
8мес

инициализация массивов с нужными значениями