Загрузчик .obj из файла с буфером - единицы - PullRequest
0 голосов
/ 01 мая 2020

Я загружаю файлы .obj из файла и после загрузки активирую каждый объект по очереди. Этот процесс работает хорошо. Основной рабочий процесс c выглядит следующим образом:

  1. Загрузить все .obj из файла (n).
  2. Дисплей i. .obj и go to i + 1

    Кстати, мне не нужен i. obj больше, когда i + 1. OBJ. активен.

Моя проблема в том, что я не хочу ждать загрузки всех объектов. Да, загрузить определенное количество объектов, но затем объекты продолжают загружаться в фоновом режиме. Если есть 100 объектов или любое число, я должен ждать их загрузки. И когда число увеличивается, время, которое мне приходится ждать, увеличивается. Я не хочу этого.

Вот мой кусок кода:

void loadobjectsfromfolder(string folder, List<GameObject> objs){
    var filesObj = new DirectoryInfo(folder) 
                     .GetFileSystemInfos("*.obj").OrderBy(fs => int.Parse(fs.Name.Split('_')[1].Substring(0, fs.Name.Split('_')[1].Length - fs.Extension.Length)));

for (int k = 0; k<filesObj.ToArray().Length; k++)
        {

        objs.Add(new OBJLoader().Load(folder + filesObj.ElementAt(k).Name ));
        objs.Last().SetActive(false);
    }

А затем,

StartCoroutine(PlayObjs(false)); //to show them all in order

Это не очень хороший способ, которым я пытался загрузить 50 Сначала выполните obj, затем вызовите StartCoroutine(PlayObjs(false)), а затем продолжите загрузку obj, но это не сработало. Я имею в виду

for (int k = 0; k<50; k++)
        {
        objs.Add(new OBJLoader().Load(folder + filesObj.ElementAt(k).Name ));
        objs.Last().SetActive(false);
        }

        StartCoroutine(PlayObjs(false));

        for (int k = 50; k<n; k++)
        {
        objs.Add(new OBJLoader().Load(folder + filesObj.ElementAt(k).Name ));
        objs.Last().SetActive(false);
        }

Он все еще ожидает загрузки всех объектов. Что вы думаете о решении?

1 Ответ

0 голосов
/ 01 мая 2020

Unity 3D автоматически загрузит ваш ob js, просто перетащите их на сцену, и они станут GameObject с компонентом Me sh Renderer. Если у вас есть риг или анимация, они будут GameObject с компонентом Skinned Me sh Renderer.

edit: если они вам нужны в массиве, вы можете ссылаться на них все и помещать их в массив, а затем до

gameObject.SetActive(false);

и

gameObject.SetActive(true);
...