版本:Unity 6 (6000.0)
语言:English
Web 中的视频播放
Web 中的嵌入资源

Web 中的纹理压缩

在 Web 平台上使用纹理压缩一种存储数据的方法,可以减少其所需的存储空间。请参阅 纹理压缩动画压缩音频压缩构建压缩
请参阅 术语表
创建针对基于其支持的纹理压缩3D 图形硬件需要将纹理压缩为专门的格式,这些格式针对快速纹理采样进行了优化。 更多信息
请参阅 术语表
格式的平台的构建。

纹理压缩格式

桌面设备和移动设备支持不同的纹理压缩格式。如果您希望您的 Web 应用程序在两种类型的浏览器上都使用压缩纹理,则必须首先选择受支持的纹理压缩格式。

要在桌面和移动浏览器上运行使用压缩纹理的游戏,您可能希望创建两个目标构建

  • 将 DXT 设置为纹理压缩格式的桌面浏览器。
  • 将自适应可缩放纹理压缩 (ASTC) 设置为纹理压缩格式的移动浏览器。

压缩格式设置的优先级

您可以从 Web 构建设置 窗口或 Web 播放器设置允许您为 Unity 生成的最终游戏设置各种特定于播放器的选项的设置。 更多信息
请参阅 术语表
窗口设置 Web 应用程序的默认纹理压缩格式。在设置纹理压缩格式之前,确定这些设置中的哪一个具有优先级非常重要。您在构建设置中设置的纹理压缩格式值优先于您在播放器设置中设置的值。默认情况下,Unity 编辑器将构建设置值设置为使用播放器设置

注意:编辑器在 Library 文件夹中序列化构建设置中的纹理压缩。这意味着它不受版本控制用于管理文件更改的系统。您可以将 Unity 与大多数常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。 更多信息
请参阅 术语表
管理。

您还可以自定义单个纹理的纹理压缩格式。您为单个纹理覆盖特定于平台的设置,允许您为每个目标平台设置纹理的分辨率、文件大小以及关联的内存大小要求、像素尺寸和质量。 更多信息
请参阅 术语表
设置的值将覆盖默认纹理压缩格式值。有关如何更改单个纹理的纹理格式用于在 3D 图形硬件(例如显卡或移动设备)进行实时渲染期间处理纹理的文件格式。 更多信息
请参阅 术语表
的信息,请参阅 纹理导入设置

设置默认压缩格式

您可以使用构建设置或播放器设置来设置 Web 应用程序的默认纹理压缩格式。您在构建设置中设置的纹理压缩格式值优先于您在播放器设置中设置的值。默认情况下,Unity 编辑器将构建设置值设置为使用播放器设置

使用构建设置选择默认纹理压缩格式

  1. 选择文件 > 构建设置
  2. 平台窗格中的平台列表中,选择Web
  3. 纹理压缩下拉菜单中选择压缩格式。

使用播放器设置选择默认纹理压缩格式

  1. 选择文件 > 构建设置
  2. 平台窗格中的平台列表中,选择Web
  3. 选择播放器设置 > 其他设置
  4. 纹理压缩格式下拉菜单中选择压缩格式。

有关如何同时为桌面浏览器和移动浏览器创建具有相应纹理压缩格式的构建的示例,请参阅 从脚本创建桌面和移动浏览器构建

从脚本创建桌面和移动浏览器构建

您可以使用脚本同时运行桌面浏览器和移动浏览器以及相应的纹理压缩格式的构建。例如

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.Diagnostics;
using System.IO;
using UnityEditor.Build.Reporting;

public class comboBuild
{
    //This creates a menu item to trigger the dual builds https://docs.unity3d.org.cn/ScriptReference/MenuItem.html 

    [MenuItem("Game Build Menu/Dual Build")]
    public static void BuildGame()
    {
      //This builds the player twice: a build with desktop-specific texture settings (WebGL_Build) as well as mobile-specific texture settings (WebGL_Mobile), and combines the necessary files into one directory (WebGL_Build)
      
      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"};

      EditorUserBuildSettings.webGLBuildSubtarget = WebGLTextureSubtarget.DXT;
      BuildPipeline.BuildPlayer(scenes, desktopPath, BuildTarget.WebGL, BuildOptions.Development); 

      EditorUserBuildSettings.webGLBuildSubtarget = WebGLTextureSubtarget.ASTC;
      BuildPipeline.BuildPlayer(scenes,  mobilePath, BuildTarget.WebGL, BuildOptions.Development); 

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

如果支持纹理压缩格式扩展,您可以修改 Web 模板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,                                            
     };  

其他资源

Web 中的视频播放
Web 中的嵌入资源