Unity 6.3
0 онлайн 94 гостей 3 в системе
Вход
Разработка платформы Шаг 316 из 387

Сжатие текстуры в Web

Используйте сжатие текстуры в веб-платформе для создания сборок, предназначенных для платформ, на основе поддерживаемых ими форматов сжатия текстуры.

Форматы сжатия текстуры

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

Чтобы запустить игру с сжатыми текстурами как в настольном, так и в мобильном браузере, можно создать две сборки:

  • Настольные браузеры с DXT в качестве формата сжатия текстуры.
  • Мобильные браузеры с адаптивным масштабируемым сжатием текстуры (ASTC) установлены в качестве формата сжатия текстуры.

Совместимость платформ и резервные варианты

Выбор формата, который поддерживается вашей целевой платформой, обеспечивает наилучшую производительность и использует наименьшее количество памяти.

Если устройство не поддерживает выбранный вами формат сжатия текстур, Unity использует программный резерв для декомпрессии текстур во время выполнения. С этим резервом ваше приложение все еще работает, но оно использует больше памяти и может работать медленнее.

Приоритет параметров формата сжатия

Вы можете установить формат сжатия текстуры по умолчанию для вашего веб-приложения либо из Параметры веб-компилирования или Интернет Настройки Игрока. Перед установкой формата сжатия текстуры важно решить, какие из этих настроек имеют приоритет. Значение формата сжатия текстуры, установленное в настройках сборки, имеет приоритет перед значением, установленным в настройках плеера. По умолчанию формат сжатия текстуры Unity Editor устанавливает значение параметров сборки на Использовать настройки плеера.

Примечание: Редактор сериализирует сжатие текстуры в настройках сборки в папке Library. Это означает, что оно не управляется системой управления версиями.

Вы также можете настроить формат сжатия текстуры для отдельных текстур. Значение, установленное для отдельной текстуры, переопределяет значение формата сжатия текстуры по умолчанию. Информацию о том, как изменить формат текстуры отдельных текстур, см. в Настройки импорта текстуры.

Установить формат сжатия по умолчанию

Формат сжатия текстуры по умолчанию для веб-приложения можно установить с помощью параметров сборки или параметров проигрывателя. Значение формата сжатия текстуры, установленное в параметрах сборки, имеет приоритет перед значением, установленным в параметрах проигрывателя. Unity Editor устанавливает значение параметров сборки на Использовать настройки плеера.

Чтобы выбрать формат сжатия текстуры по умолчанию с помощью параметров сборки:

  1. Выбрать Файл > Создание профилей.
  2. Из списка платформ в панели Платформы выберите Веб или создать профиль сборки для Веб платформы.
  3. Выберите формат сжатия из раскрывающегося меню Сжатие текстуры.

Чтобы выбрать формат сжатия текстуры по умолчанию с помощью настроек плеера:

  1. Выбрать Файл > Создание профилей.
  2. Из списка платформ на панели Платформа выберите Веб.
  3. Выбрать Настройки Игрока > Другие настройки.
  4. Выберите формат сжатия из раскрывающегося меню Формат сжатия текстуры.

Пример одновременного создания сборок для настольных и мобильных браузеров с соответствующими форматами сжатия текстур см. в Создание сборок для настольных и мобильных браузеров из сценария.

Создание сборок для настольных и мобильных браузеров из сценария

С помощью скрипта можно одновременно запустить сборку для браузеров для настольных и мобильных устройств с соответствующими форматами сжатия текстуры. Например:

using UnityEditor;
using System.IO;
using UnityEngine;

public class ComboBuild
{
    // This creates a menu item to trigger the dual builds.
    [MenuItem("Game Build Menu/Dual Build")]
    public static void BuildGame()
    {
        // Define the output folder structure and names for the builds.
        string dualBuildPath = "WebGLBuilds";
        string desktopBuildName = "WebGL_Build";
        string mobileBuildName = "WebGL_Mobile";
        string desktopPath = Path.Combine(dualBuildPath, desktopBuildName);
        string mobilePath = Path.Combine(dualBuildPath, mobileBuildName);
        string[] scenes = new string[] { "Assets/scene.unity" };

        // Desktop build with DXT texture compression:
        BuildPlayerOptions desktopBuildPlayerOptions = new BuildPlayerOptions();
        desktopBuildPlayerOptions.scenes = scenes;
        desktopBuildPlayerOptions.locationPathName = desktopPath;
        desktopBuildPlayerOptions.target = BuildTarget.WebGL;
        desktopBuildPlayerOptions.options = BuildOptions.Development;
        desktopBuildPlayerOptions.subtarget = (int)WebGLTextureSubtarget.DXT;
        BuildPipeline.BuildPlayer(desktopBuildPlayerOptions);

        // Mobile build with ASTC texture compression:
        BuildPlayerOptions mobileBuildPlayerOptions = new BuildPlayerOptions();
        mobileBuildPlayerOptions.scenes = scenes;
        mobileBuildPlayerOptions.locationPathName = mobilePath;
        mobileBuildPlayerOptions.target = BuildTarget.WebGL;
        mobileBuildPlayerOptions.options = BuildOptions.Development;
        mobileBuildPlayerOptions.subtarget = (int)WebGLTextureSubtarget.ASTC;
        BuildPipeline.BuildPlayer(mobileBuildPlayerOptions);

        // Copy the mobile.data file to the desktop build directory.
        FileUtil.CopyFileOrDirectory(Path.Combine(mobilePath, "Build", mobileBuildName + ".data"), Path.Combine(desktopPath, "Build", mobileBuildName + ".data"));
    }
}

Вы можете изменить Веб-шаблоны index.html файл, чтобы выбрать соответствующий файл данных, если есть поддержка расширения формата сжатия текстуры:

// choose the data file based on whether there's support for the ASTC texture compression format
      var dataFile = "/{{{ DATA_FILENAME }}}";                                  
      var c = document.createElement("canvas");                                 
      var gl = c.getContext("webgl");                                      
      var gl2 = c.getContext("webgl2");                                    
      if ((gl && gl.getExtension('WEBGL_compressed_texture_astc')) || (gl2 &&   
              gl2.getExtension('WEBGL_compressed_texture_astc'))) {             
        dataFile =  "/WebGL_Mobile.data";                                       
      }                                                                         

      var buildUrl = "Build";
      var loaderUrl = buildUrl + "/{{{ LOADER_FILENAME }}}";                    
      var config = {                                                            
        dataUrl: buildUrl + dataFile,                                           
        frameworkUrl: buildUrl + "/{{{ FRAMEWORK_FILENAME }}}",                 
#if USE_WASM                                                                    
        codeUrl: buildUrl + "/{{{ CODE_FILENAME }}}",                           
#endif                                                                          
#if MEMORY_FILENAME                                                             
        memoryUrl: buildUrl + "/{{{ MEMORY_FILENAME }}}",                       
#endif
#if SYMBOLS_FILENAME                                                            
        symbolsUrl: buildUrl + "/{{{ SYMBOLS_FILENAME }}}",                     
#endif                                                                          
        streamingAssetsUrl: "StreamingAssets",                                
        companyName: {{{ JSON.stringify(COMPANY_NAME) }}},
        productName: {{{ JSON.stringify(PRODUCT_NAME) }}},
      productVersion: {{{ JSON.stringify(PRODUCT_VERSION) }}},                
        showBanner: unityShowBanner,                                            
     };  

Дополнительные ресурсы