【发布时间】:2022-02-01 23:01:38
【问题描述】:
我有一个奇怪的问题。一切正常,突然间我无法从另一个脚本访问我的列表。我只是不明白为什么。 看起来我的实例在统一按下播放时被第二个脚本删除了。 列表显示在 Unity 检查器中,它按照我的预期填充。但是在调试的第二个脚本中调用列表时,它显示列表的长度为 0;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class listePoretka : MonoBehaviour
{
public static listePoretka instance1;
int broj;
public List<int> lista = new List<int>();
int[] lista1 = { 7, 17, 28, 36, 45, 49, 56, 62, 67, 76, 81, 87, 94, 98, 107, 115, 126, 136, };
int[] lista2 = { 4, 20, 29, 42, 51, 55, 59, 62, 71, 74, 82, 85, 89, 93, 102, 115, 124, 140 };
int[] lista3 = {7,17,28,32,39,45,55,60,66,77,83,88,98,104,111,115,126,136 };
int[] lista4 = { 7,18,33,39,41,52,61,68,71,72,75,82,91,102,104,110,125,136};
int[] lista5 = { 8, 18, 29, 40, 47, 50, 58, 63, 67, 76, 80, 85, 93, 96, 103, 114, 125, 135 };
// public int[,] dimenzijeUkrstenice;
// Start is called before the first frame update
public int[][] listaLista;
void Awake()
{
if (instance1 == null)
{
instance1 = this;
}
else
{
Destroy(instance1);
}
}
void Start()
{
broj = PlayerPrefs.GetInt("ukrstenica");
listaLista = new int[][] { lista1, lista2,lista3 ,lista4,lista5};
Debug.Log(listaLista[broj].Length);
// dimenzijeUkrstenice = new int[,] { { duzineRijeci.instance.duzinaH,duzineRijeci.instance.duzinaV } };
foreach (int i in listaLista[broj])
{
lista.Add(i);
Debug.Log("is adding");
}
}
}
这是我试图在另一个脚本中到达的脚本代码。下面是我到达第一个脚本的脚本代码:
public class ukrstenicaGrid : MonoBehaviour
{
public static ukrstenicaGrid instance;
public Text horizontalno;
public Text vertikalno;
public GameObject panelWin;
public static string maliBroj;
int kojiIndex = 1;
int brojUmalomTekstu = 1;
int brojGrida=0;
int brojUmalomDrugi = 1;
private int rows=12;
private int columns = 12;
public Image canvas;
public Canvas kanvas;
public float w;
public float h;
public float sirina;
public float visina;
Vector2 skala;
public float squareScale = 1.0f;
public float squareGap = 0.1f;
public float squareOfser = 0.0f;
float razmak = 0.5f;
public Vector2 startPostition = new Vector2(0.0f, 0.0f);
float pocetnaX;
public GameObject gridUkrstenica;
private List<GameObject> gridovi = new List<GameObject>();
void Awake()
{
if (instance == null)
{
instance = this;
}
else { Destroy(instance); }
}
void Start()
{
rows = 12;
columns = 12;
skala = kanvas.transform.localScale;
Debug.Log(skala);
h = canvas.GetComponent<RectTransform>().rect.height*skala.y;
w = kanvas.GetComponent<RectTransform>().rect.width* skala.x;
sirina = w / (float)columns-razmak/columns;
visina = h / rows-razmak/rows;
spawnGrids();
setSquarePositions();
getTagH();
// getTagV();
probajTag();
obrisiSakeceva();
// dodajSlova();
}
private void spawnGrids()
{
float visinaCela;
float visinaSvihCelija;
h = canvas.GetComponent<RectTransform>().rect.height * skala.y;
for (int row = 0; row < rows; row++)
{
for (int column = 0; column < columns; column++)
{
GameObject gridavi = (GameObject)Instantiate(gridUkrstenica) as GameObject;
//Instantacija gameobjekta u listu gameobjekata
// gridovi[gridovi.Count - 1].GetComponent<testing>().setSquareIndex(brojGrida);
//Postavljanje objekta kao childa od objekta koji drzi skriptu
gridovi.Add(gridavi); //Postavljanje objekta kao childa od objekta koji drzi skriptu
gridovi[gridovi.Count - 1].transform.parent = this.transform;
gridovi[gridovi.Count - 1].GetComponent<klikUkrstenica>().setSquareIndex(brojGrida);
maliBroj = kojiIndex.ToString();
gridovi[gridovi.Count - 1] .GetComponent< RectTransform>().sizeDelta = new Vector2(w/columns, h/rows);
//Visina jedne celije
visinaCela = gridovi[0].GetComponent<RectTransform>().rect.height;
visinaSvihCelija = visinaCela * rows;
startPostition = new Vector2(((0 - w / 2) - razmak+(gridovi[0].GetComponent
<RectTransform>().rect.width/2))/skala.x,(0+h/2-visinaCela/2)/skala.y);
gridovi[gridovi.Count - 1].GetComponent<klikUkrstenica>().drugiText.GetComponent<Text>().text=maliBroj ;
pocetnaX = startPostition.x;
brojGrida++;
kojiIndex++;
}
}
Debug.Log("velicina liste" + listePoretka.instance1.lista);
foreach (int i in listePoretka.instance1.lista)
{
gridovi[i].GetComponent<Image>().color = Color.black;
gridovi[i].GetComponentInChildren<Text>().text = "1";
}
}
我也尝试过使用公共静态列表,但问题是一样的。
【问题讨论】:
-
你应该在
Awake中初始化你的listePoretka,而不是Start。这样,当调用ukrstenicaGrid.Start时,一切都已经初始化。这回答了你的问题了吗? Awake() and Start()