Делаю онлайн лобби на вебсокетах. От сервера приходит сообщение с типом, который я через switch-case проверяю на разные совпадения. Когда приходит нужное, я перенаправляю реплай в лобби. Метод точно вызывается, потому что срабатывает Debug.Log, но когда я пытаюсь заспавнить инстанс сущности игры в список, она не спавнится. Если же я это делаю по нажатию клавиши (нажал-заспавнил), работает. Почему?
Реплай структура:
[System.Serializable]
public struct ReplyMessage {
public string type;
public bool success;
public ReplyData[] data;
public string error;
}
[System.Serializable]
public struct ReplyData {
// fields
}
Фрагмент проверки ответа:
[SerializeField] private GamesList m_GamesList;
// ...
private void OnMessage(object sender, MessageEventArgs e) {
ReplyMessage reply = JsonUtility.FromJson<ReplyMessage>(e.Data);
switch (reply.type) {
// ...
case "get_game_requests":
m_GamesList.PutGamesInList(reply.data);
break;
// ...
}
// ...
Фрагмент списка GamesList:
public void PutGamesInList(ReplyData[] data) {
// вот эта строка выводится
Debug.Log("Refresh Games List [" + data.Length.ToString() + "]");
// а это не работает
AddGameToList("Player", 12, 6, "sdfsdfsd");
// эта строка тоже не запускается
Debug.Log("+");
}
// а это работает..
private void Update() {
if (Input.GetKeyDown(KeyCode.T))
AddGameToList("Player", 12, 6, "sdfsdfsd");
}
// метод спавна
private void AddGameToList(string player, int d1, int d2, string gameId) {
var game = Instantiate(m_GamePrefab, m_GamesListParent);
Color bg = _Index % 2 == 0 ? m_Color1 : m_Color2;
game.Initialize(this, player, d1, d2, gameId, bg);
_ListElements.Add(game);
_Index++;
}