Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

AssetBundle.LoadFromStreamAsync

Declaration

public static AssetBundleCreateRequest LoadFromStreamAsync(Stream stream);
public static AssetBundleCreateRequest LoadFromStreamAsync(Stream stream, uint crc);
public static AssetBundleCreateRequest LoadFromStreamAsync(Stream stream, uint crc, uint managedReadBufferSize);

Параметры

Параметр Описание
поток Управляемый объект Поток. Unity вызывает Read(), Seek() и свойство Length этого объекта для загрузки данных AssetBundle.
crc (сохранить) Необязательная контрольная сумма CRC-32 несжатого содержимого.
managedReadBufferSize Это позволяет переопределить размер буфера чтения, который Unity использует при загрузке данных. Размер по умолчанию — 32 КБ.

Возвращаемое значение

AssetBundleCreateRequest Асинхронный запрос на загрузку AssetBundle. Используйте свойства AssetBundleCreateRequest.assetBundle для получения AssetBundle после его загрузки.

Описание

Асинхронно загружает AssetBundle из управляемого потока.

Функция поддерживает пакеты любого типа сжатия. lzma сжатые данные декомпрессируются в память, в то время как несжатые и сжатые по кускам пакеты читаются непосредственно из потока.

В отличие от LoadFromStream, эта функция является асинхронной.

В отличие от LoadFromFileAsync, данные для AssetBundle предоставляются управляемым объектом потока.

Ниже приведены ограничения на объект потока для оптимизации загрузки данных AssetBundle:

  1. Данные AssetBundle должны начинаться с нулевого положения потока.
  2. Unity устанавливает позицию поиска на нуль перед загрузкой данных AssetBundle.
  3. Unity предполагает, что положение чтения в потоке не изменяется никаким другим процессом. Это позволяет процессу Unity читать из потока без необходимости вызывать Seek() перед каждым чтением.
  4. stream.CanRead должен возвращать true.
  5. stream.CanSeek должен возвращать true.
  6. Она должна быть доступна из потоков, отличных от главного потока. Seek() и Read() могут быть вызваны из любого потока Unity.
  7. В некоторых случаях Unity будет пытаться прочитать прошедший размер AssetBundle Реализация Stream должна грациозно обрабатывать это без выброса исключений. Реализация Stream должна также возвращать фактическое количество прочитанных байт (не включая любые байт, прошедшие через конец потока). AssetBundle данных).
  8. При попытке чтения данных, начиная с конца данных AssetBundle, реализация потока должна возвращать 0 байт прочитанных данных и не вызывать исключений.

Чтобы уменьшить количество вызовов из нативного в управляемый код, данные считываются из потока с помощью буферизированного считывателя с размером буфера managedReadBufferSize.

  • Изменение managedReadBufferSize может изменить производительность загрузки, особенно на мобильных устройствах.
  • Оптимальное значение для managedReadBufferSize варьируется от проекта к проекту и, возможно, от пакета ассетов к пакету ассетов.
  • Хороший диапазон значений для экспериментов: 8КБ, 16КБ, 32КБ, 64КБ, 128КБ.
  • Большие значения могут быть лучше для сжатых пакетов ассетов или если пакет ассетов содержит ассеты большого размера, или если пакет ассетов не содержит много ассетов и они загружаются последовательно из пакета ассетов.
  • Меньшие значения могут быть лучше для несжатых пакетов ассетов и чтения большого количества небольших ассетов или если пакет ассетов содержит много ассетов и ассет загружается в случайном порядке.

Не удаляйте объект Stream во время загрузки AssetBundle или любых ассетов из пакета. Его жизнь должна быть длиннее, чем AssetBundle. Это означает, что вы удаляете объект Stream после вызова AssetBundle.Unload.

Дополнительные ресурсы: AssetBundle, LoadFromStream LoadFromFileAsync.