Ошибка, но все работает!
|
|
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 |
|
| |