есть 2 класса
public class GameController : MonoBehaviour {
public MainDeck deck;
void Start () {
GameObject deckRespawn = GameObject.Find("deckRespawn");
deck = Instantiate(deck, deckRespawn.transform.position, deckRespawn.transform.rotation) as MainDeck;
//здесь я надеялся, что метод start() в MainDeck уже выполнился и очередь заполнилась, попробую
// вывести длину очереди
Debug.Log(deck.Cards.Count); //выводит 0
}
}
и собственно класс MainDeck
public class MainDeck : MonoBehaviour {
public Queue<Card> Cards = new Queue<Card>();
private GameObject[] prefabs;
private static int DECK_SIZE = 30;
void Start () {
prefabs = Resources.LoadAll<GameObject>("cards");
populateDeck(DECK_SIZE);
}
private void populateDeck(int deckSize)
{
for (int i = 0; i < deckSize; i++)
{
Card card = new Card();
card.damage = Random.Range(0, 100);
card.health = Random.Range(200, 1000);
card.id = i;
card.image = prefabs[Random.Range(0, prefabs.Length)];
Cards.Enqueue(card);
}
}
}
Сам вопрос почему при Instantiate метод start(), работает позже самого вызова Instantiate, то есть как я указал в комменте он выводит длину 0, но тем не менее я проверял, что Очередь заполняется и ее длина 30, но позже. Как мне лучше инициализировать ресурсы в таком случае? Как это делается в unity?
Я конечно уже прочитал про метод awake(), но правильно ли это?
Можно даже пример какой-нибудь кинуть буду рад.
P.S. Сам unity скачал только вчера, да и с C# знакомлюсь наравне с unity, так что если это очевидный вопрос, то ...