Среда, 17 Апреля 2024, 02:02

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Ошибка, но все работает!
Ошибка, но все работает!
DaniilF12Дата: Воскресенье, 23 Декабря 2018, 20:24 | Сообщение # 1
был не раз
Сейчас нет на сайте
Ошибка - IndexOutOfRangeException: Array index is out of range.
GameScript.Update () (at Assets/Scripts/GameScript.cs:53)
Скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class GameScript : MonoBehaviour {

public Text LVLText;
public int scores;
public int lvl = 1;
public int lvlup = 400;
public int score;
public Text SText;
private int Click = 1;
public int[] level;
[Header("Shop")]
public int[] shopClickCount;
public int[] shopCosts;
public Text[] shopBattText;
private int SuperCount;
public int[] shopSuperCosts;
public Text[] shopSuperBattText;
public GameObject SPanel;
public GameObject NSPanel;
public GameObject LVL2Butt;
public GameObject ScoresPanel;
public Text ScoresText;
public Button ButtonShop1;
public Color ColButtonShop1;
public Color ColButtonShop2;
public int index;

private void Start(){
StartCoroutine(SuperMoneySec());
ColButtonShop1 = new Vector4(0.2924528f, 0.2924528f, 0.2924528f, 1);
ColButtonShop2 = new Vector4(0.490566f, 0.490566f, 0.490566f, 1);
}
private void Update(){
SText.text = score + "";
LVLText.text = lvl + " lvl";
ScoresText.text = scores + " / " + lvlup;
if (scores >= lvlup){
lvl += 1;
scores *= 0;
lvlup += 1000;
if (lvl == 2){
LVL2Butt.SetActive(true);
}
}
if (score <= shopCosts[index]){
ButtonShop1.GetComponent<Image>().color = ColButtonShop1;
}
if (score == shopCosts[index] && score >= shopCosts[index]) {
ButtonShop1.GetComponent<Image>().color = ColButtonShop2;
}
}
public void ViewScores(){
ScoresPanel.SetActive(!ScoresPanel.activeSelf);
}
public void Reclama(int index){
if (score >= shopCosts[index]){
Click += shopClickCount[index];
score -= shopCosts[index];
shopCosts[index] *= 2;
shopBattText[index].text = shopCosts[index] + "$";
}
}
public void ShopPanel (){
SPanel.SetActive(!SPanel.activeSelf);
}
public void NShopPanel (){
NSPanel.SetActive(!NSPanel.activeSelf);
}
public void NanyatPromoutera(int index){
if (score >= shopSuperCosts[index]){
SuperCount++;
score -= shopSuperCosts[index];
shopSuperCosts[index] *= 2;
shopSuperBattText[index].text = shopSuperCosts[index] + "$";
}
}
public void RecInYouTube (int index){
if (score >= shopCosts[index]){
Click += shopClickCount[index];
score -= shopCosts[index];
shopCosts[index] *= 2;
shopBattText[index].text = shopCosts[index] + "$";
}
}
public void RecInInternet(int index){
if (score >= shopCosts[index]){
Click +=shopClickCount[index];
score -= shopCosts[index];
shopCosts[index] *= 2;
shopBattText[index].text = shopCosts[index] + "$";
}
}
IEnumerator SuperMoneySec(){
while(true){
scores+=SuperCount;
score += SuperCount;
yield return new WaitForSeconds(1);
}
}
public void OnClick (){
score += Click;
SText.text = score + "";
scores += Click;
}
}
drcrackДата: Воскресенье, 23 Декабря 2018, 21:39 | Сообщение # 2
старожил
Сейчас нет на сайте
юзай тег code
masb8ly-GCДата: Воскресенье, 23 Декабря 2018, 21:51 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
53я строка. Ошибка IndexOutOfRangeException возникает при выходе за пределы массива/списка/другой структуры данных, соответственно, элемента с индексом index в массиве shopCosts не существует.
Код
if (score == shopCosts[index] && score >= shopCosts[index])

Другой вопрос, что ты в принципе хочешь добиться этой строкой, ты проверяешь 2 условия, одно из которых включает другое, а поскольку между ними стоит &&, то >= и == у тебя превращаются в ==, а значит тут возможно 2 варианта:

  • В одном из случаев ты написал shopCosts[index] вместо shopSuperCosts[index];
  • Ты не до конца разобрался и тут достаточно score >= shopCosts[index] или же наоборот score == shopCosts[index];


В любом случае не стоит утверждать, что "все работает", поскольку код, в котором вылетает critical error уже, по-умолчанию, не работает. Проверь свой код внимательно еще разок и, как вариант, посмотри что у тебя со значением index, возможно оно указано неверно.

P.S. Чисто совет, названия функций пиши на английском.


Backend Developer ESIS
Client Side Developer Room8Studio
Technical Leader Lucid Reality Labs
Chief Technology Officer The Intruders
Chief Technology Officer RoyalePlay Games


Сообщение отредактировал masb8ly-GC - Воскресенье, 23 Декабря 2018, 21:53
DaniilF12Дата: Понедельник, 24 Декабря 2018, 19:14 | Сообщение # 4
был не раз
Сейчас нет на сайте
masb8ly-GC, В одном из случаев ты написал shopCosts[index] вместо shopSuperCosts[index]; С этим у меня так и нужно.
Ты не до конца разобрался и тут достаточно score >= shopCosts[index] или же наоборот score == shopCosts[index]; Нет, мне там нужно чтобы та строка кода работала и когда больше shopCosts и когда равно.
BrightSpotДата: Понедельник, 24 Декабря 2018, 19:41 | Сообщение # 5
заслуженный участник
Сейчас нет на сайте
Цитата DaniilF12 ()
мне там нужно чтобы та строка кода работала и когда больше shopCosts и когда равно.

">=" - больше или равно... так что действительно бесполезная проверка.
поставь перед своими условиями "if (score == shopCosts[index] && score >= shopCosts[index])" проверки аля:
Код
if(index >= shopCosts.Length)//shopCosts - название массива
{
Debug.Log("тут ошибка!");
index =  shopCosts.Length - 1;
}



Более мощный компьютер глючит быстрее и точнее.


Сообщение отредактировал BrightSpot - Понедельник, 24 Декабря 2018, 19:43
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Ошибка, но все работает!
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг