版本:Unity 6 (6000.0)
语言:English
Web 中的 AssetBundles
优化您的 Web 构建

分发大小和代码剥离

在发布到 Web 时,保持构建大小较小非常重要,这样用户可以在内容开始之前获得合理的下载时间。有关减少资源大小的一般提示,请参阅有关减少构建的文件大小的文档。

Web 的提示和技巧

  • 纹理导入器中,为所有压缩纹理指定Crunch纹理压缩一种存储数据的方法,可以减少其所需的存储空间。请参阅纹理压缩动画压缩音频压缩构建压缩
    请参阅词汇表中的内容
    格式。

  • 不要部署开发版本开发版本包含调试符号并启用探查器。 更多信息
    请参阅词汇表中的内容
    ;它们未经压缩或压缩,因此文件大小要大得多。

  • 播放器设置窗口中(单击编辑> 项目设置一系列广泛的设置,允许您配置物理、音频、网络、图形、输入以及项目其他许多方面的行为。 更多信息
    请参阅词汇表中的内容
    > Web),展开发布设置,如果您不需要构建中的异常,请将启用异常设置为

  • 播放器设置 > 其他设置面板中启用剥离引擎代码,以确保构建高效。

  • 当使用第三方托管 dll 时,请注意它可能带有会增加生成代码大小的依赖项。

如果您进行发布构建,Unity 会根据 Web 播放器设置的发布设置面板中选择的压缩格式压缩构建输出文件。

有关如何发布压缩构建的更多信息,请参阅部署压缩构建

代码剥离

默认情况下,Unity 会从您的构建中删除所有未使用的代码。您可以通过播放器设置更改此设置(菜单:编辑> 项目设置,然后选择播放器类别):选择其他设置面板以访问剥离引擎代码选项。最好启用剥离功能进行构建。

通过代码剥离,Unity 会扫描您的项目以查找使用的任何UnityObject派生类(通过在您的脚本代码或场景中的序列化数据中被引用)。然后,它会从构建中删除其任何类都未使用的 Unity 子系统。这使得您的构建具有更少的代码,从而导致下载量更少,并且需要解析的代码更少(因此代码运行速度更快并使用更少的内存)。

代码剥离问题

如果代码剥离剥离了实际上必要的代码,则可能会导致项目出现问题。当您在运行时加载包含未包含在主构建中的类的 AssetBundles 时,可能会出现这种情况,并且这些类已从项目中剥离。发生这种情况时,错误消息会显示在浏览器的 JavaScript 控制台中(可能随后会出现更多错误)。例如

无法生成 ID 为 XXX 的类

要解决这些错误,请在类 ID 参考中查找 ID(例如上面示例中的XXX),以查看它尝试创建哪个类的实例。在这种情况下,您可以强制 Unity 将该类的代码包含在构建中,方法是向您的脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
请参阅词汇表中的内容
或您的场景场景包含游戏环境和菜单。将每个唯一的场景文件视为一个唯一的关卡。在每个场景中,您放置环境、障碍物和装饰物,本质上是以片段的方式设计和构建游戏。 更多信息
请参阅词汇表中的内容
添加对该类的引用,或通过向您的项目添加link.xml文件。

以下是一个示例,确保碰撞器一个用于处理对象物理碰撞的不可见形状。碰撞器不需要与对象的网格完全相同的形状 - 粗略的近似值通常更有效,并且在游戏玩法中无法区分。 更多信息
请参阅词汇表中的内容
类和物理模块保留在项目中。将此 XML 代码添加到名为link.xml的文件中,并将该文件放入您的Assets文件夹中。

<linker>
    <assembly fullname="UnityEngine">
        <type fullname="UnityEngine.Collider" preserve="all"/>
    </assembly>
</linker>

如果您怀疑剥离会导致构建出现问题,您也可以尝试在测试期间禁用剥离引擎代码选项。

Unity 没有提供方便的方法来查看构建中包含哪些模块和类,这将允许您优化项目以进行良好的剥离。但是,要概述包含的类和模块,您可以在构建后查看生成的Temp/StagingArea/Data/il2cppOutput/UnityClassRegistration.cpp文件。

请注意,剥离引擎代码选项仅影响 Unity 引擎代码。IL2CPPUnity 开发的脚本后端,您可以将其用作在为某些平台构建项目时替代 Mono 的方法。 更多信息
请参阅词汇表中的内容
始终会剥离托管 dll 和脚本中的字节码。当您需要通过反射而不是通过代码中的静态引用动态引用托管类型时,这可能会导致问题。如果您需要通过反射访问类型,您可能还需要设置link.xml文件以保留这些类型。有关link.xml文件的更多信息,请参阅有关iOS 构建大小优化的文档页面。

移动构建输出文件

要更改Build文件夹的位置,请修改 Web 模板 index.html 文件中的 buildUrl 变量。

要更改Build文件夹内文件的位置,请更改 index.html 文件中 config 变量参数中的 URL(即dataUrlwasmCodeUrlwasmMemoryUrlwasmFrameworkUrl)。

如果要将文件托管在内容分发网络 (CDN) 上,则可以为这些文件指定外部服务器上的 URL,但您需要确保托管服务器已为其启用跨源资源共享 (CORS) 才能正常工作。有关 CORS 的更多信息,请参阅有关Web 网络的手册页面。

增量构建

IL2CPP 为您的项目生成的 C++ 代码是增量编译的;也就是说,自上次构建以来已更改的生成的 C++ 代码才会再次编译。未更改的源代码会重新使用为先前构建生成的相同目标文件。用于增量 C++ 构建的目标文件存储在 Unity 项目的Library/il2cpp_cache目录中。

要执行生成的 C++ 代码的全新构建(不使用增量编译),请删除 Unity 项目中的Library/il2cpp_cache目录。请注意,如果 Unity 编辑器版本与用于先前 Web 构建的版本不同,则 Unity 会自动执行全新构建。


  • 在 Unity 2017.3 中添加了完整无堆栈跟踪
Web 中的 AssetBundles
优化您的 Web 构建