在 Web 平台上使用纹理压缩一种存储数据的方法,可以减少其所需的存储空间。请参阅 纹理压缩、动画压缩、音频压缩、构建压缩。
请参阅 术语表 创建针对基于其支持的纹理压缩3D 图形硬件需要将纹理压缩为专门的格式,这些格式针对快速纹理采样进行了优化。 更多信息
请参阅 术语表 格式的平台的构建。
桌面设备和移动设备支持不同的纹理压缩格式。如果您希望您的 Web 应用程序在两种类型的浏览器上都使用压缩纹理,则必须首先选择受支持的纹理压缩格式。
要在桌面和移动浏览器上运行使用压缩纹理的游戏,您可能希望创建两个目标构建
您可以从 Web 构建设置 窗口或 Web 播放器设置允许您为 Unity 生成的最终游戏设置各种特定于播放器的选项的设置。 更多信息
请参阅 术语表 窗口设置 Web 应用程序的默认纹理压缩格式。在设置纹理压缩格式之前,确定这些设置中的哪一个具有优先级非常重要。您在构建设置中设置的纹理压缩格式值优先于您在播放器设置中设置的值。默认情况下,Unity 编辑器将构建设置值设置为使用播放器设置。
注意:编辑器在 Library
文件夹中序列化构建设置中的纹理压缩。这意味着它不受版本控制用于管理文件更改的系统。您可以将 Unity 与大多数常见的版本控制工具结合使用,包括 Perforce、Git、Mercurial 和 PlasticSCM。 更多信息
请参阅 术语表管理。
您还可以自定义单个纹理的纹理压缩格式。您为单个纹理覆盖特定于平台的设置,允许您为每个目标平台设置纹理的分辨率、文件大小以及关联的内存大小要求、像素尺寸和质量。 更多信息
请参阅 术语表设置的值将覆盖默认纹理压缩格式值。有关如何更改单个纹理的纹理格式用于在 3D 图形硬件(例如显卡或移动设备)进行实时渲染期间处理纹理的文件格式。 更多信息
请参阅 术语表的信息,请参阅 纹理导入设置。
您可以使用构建设置或播放器设置来设置 Web 应用程序的默认纹理压缩格式。您在构建设置中设置的纹理压缩格式值优先于您在播放器设置中设置的值。默认情况下,Unity 编辑器将构建设置值设置为使用播放器设置。
使用构建设置选择默认纹理压缩格式
使用播放器设置选择默认纹理压缩格式
有关如何同时为桌面浏览器和移动浏览器创建具有相应纹理压缩格式的构建的示例,请参阅 从脚本创建桌面和移动浏览器构建。
您可以使用脚本同时运行桌面浏览器和移动浏览器以及相应的纹理压缩格式的构建。例如
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,
};