Создание 2 МБ сборного занимает много времени и отстает от игры - PullRequest
0 голосов
/ 17 января 2019

Когда создается экземпляр сборника с использованием метода Instantiate(), он отстает от моей игры.

Я также пробовал объединение объектов и assetBundle.

Я загрузил 4 3d-модели, используя префабы.

Размер модели, которую я создаю, 2MB.

1 Ответ

0 голосов
/ 17 января 2019

Если префаб настолько велик, может быть, просто ваше устройство не способно отобразить его в нужном вам f / s.

Также возможно, что лаги возникают не из самой модели, а из-за инициализации (Awake, OnEnable) вызовов компонентов, прикрепленных к этому объекту.


Если при создании экземпляра происходит только медленно, вы должны использовать Instantiate() только один раз в Awake или Start и только отключать / включать объекты, когда они не нужны, через SetActive (каким-то образом какой объект пул делает).

Если задействовано больше сцен, вы должны использовать DontDestroyOnLoad, чтобы перенести их на другие сцены.


Вы можете попробовать что-то вроде

async Task LoadModelAsync()
{
    var assetBundle = await GetAssetBundle("www.my-server.com/myfile");
    var prefab = await assetBundle.LoadAssetAsync<GameObject>("myasset");
    GameObject.Instantiate(prefab);
    assetBundle.Unload(false);
}

async Task<AssetBundle> GetAssetBundle(string url)
{
    return (await new WWW(url)).assetBundle;
}

(см. Как использовать Async-await в Unity3d - только если им не хватает ; после (await new WWW(url)).assetBundle)

и используйте его, например,

private void Awake()
{
    InstantiateAsync();
}

async void InstantiateAsync()
{
    // Example of long running code.
    await LoadModelAsync();
}

(см. здесь для еще лучших решений ). Но имейте в виду, что объект не будет их сразу же, а будет создан позже.


Или вы можете войти в новую Unity Job System , которая кажется еще быстрее ( заявлено здесь )

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