Вторник, 26 Марта 2019, 23:29

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » 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

Dynamic GPU Occlusion Culling for Unity
Zeal — онлайн 3rd person ARPG без гринда
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
AR/VR/MR Developer Lucid Reality Labs
CTO The Intruders


Сообщение отредактировал 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-2019 Рейтинг