Я пытаюсь создать базу игр для памяти в учебнике, который вы можете найти здесь
Все шло хорошо, пока я не получил это исключение:
IndexOutOfRangeException: индекс массива находится вне диапазона. GameController.addgamepuzzles () (в Assets / memorygame / scripts / GameController.cs: 43)
Это строка
gamepuzzles.Add(puzzles[index]);
Это мой действительный код:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class GameController : MonoBehaviour {
[SerializeField]
private Sprite bgimage;
public Sprite[] puzzles;
public List<Sprite> gamepuzzles = new List<Sprite>();
public List<Button> btns = new List<Button>();
void Start () {
GetButttons();
AddListeners();
addgamepuzzles();
puzzles = Resources.LoadAll<Sprite> ("Sprites/Candy");
}
void GetButttons()
{
GameObject[] objects = GameObject.FindGameObjectsWithTag("PuzzleButton");
for(int i = 0; i < objects.Length; i++){
btns.Add(objects[i].GetComponent<Button>());
btns[i].image.sprite = bgimage;
}
}
void addgamepuzzles(){
int looper = btns.Count;
int index = 0;
for (int i = 0; i < looper; i++){
if (index == looper / 2){
index = 0;
}
gamepuzzles.Add(puzzles[index]);
index++;
}
}
void AddListeners(){
foreach (Button btn in btns){
btn.onClick.AddListener(() => PickPuzzle());
}
}
public void PickPuzzle(){
string name = UnityEngine.EventSystems.EventSystem.current.currentSelectedGameObject.name;
Debug.Log("you clicked a button with name: " + name);
}
}
Это мой сценарий добавления кнопок
using UnityEngine;
using System.Collections;
public class AddButtons : MonoBehaviour {
[SerializeField]
public Transform PuzzleFiled;
[SerializeField]
private GameObject btn;
void Awake () {
for(int i = 0; i < 8; i++){
GameObject button = Instantiate(btn);
button.name ="" +i;
button.transform.SetParent(PuzzleFiled, false);
}
}
}
Два сценария прикреплены к пустому gameObject
диспетчеру игровых вызовов. Также у меня есть панель под названием Puzzle Field с прикрепленным к ней элементом сетки. У меня есть также сборный с кнопкой и сценарием изображения на нем.