Unity3D: невозможно создать примитивы для цикла for - PullRequest
0 голосов
/ 31 октября 2019

Я использую строку в формате JSON для создания некоторых кубов в Unity. Идея довольно проста, но она не работает.

public void CreateObject(string message)
{           

    Newtonsoft.Json.Linq.JArray jsonArray = Newtonsoft.Json.Linq.JArray.Parse(message);          


    for (int i = 0; i < jsonArray.Count; i++)
    {                
        string jsonArrayString = jsonArray[i].ToString();   

        CompressorObject generator = JsonConvert.DeserializeObject<CompressorObject>(jsonArrayString);   

        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        Debug.Log(i);    
    }

}

Проблема в том, что кубы не создаются. Я попытался войти в i, чтобы определить, когда вся эта операция умирает, но это только из-за линии, в которой я пытаюсь создать кубы. Десериализация работает как задумано. Если я введу строку, содержащую, скажем, 50 элементов, то счетчик увеличится до 49 (как и должно быть) - если я, тем не менее, оставлю там строку

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);

, она даже не достигнет журнала. Я не вижу никаких ошибок, никаких предупреждений, и я убедился, что весь процесс создания объекта, подобного этому, работает. Есть идеи, почему это может не сработать? Спасибо!

1 Ответ

0 голосов
/ 05 ноября 2019

В конце концов я обнаружил проблему - я вызывал функции из другого потока, о котором я не знал. Очевидно, Unity позволяет таким функциям, как Instantiate и CreatePrimitive, вызываться только из основного потока. Это то, над чем мне придется поработать, но это объясняет странное поведение, которое я получаю.

Правка: в итоге я использовал инструмент под названием UnityMainThreadDispatcher , и теперь все работает как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...