Version: 6000.3
语言: 中文
Web 中的资产包
优化您的 Web 构建

分发大小和代码剥离

发布 Web 时,请务必保持较低的构建大小,以便用户在内容开始之前获得合理的下载时间。有关减小资产大小的一般提示,请参阅有关减小构建文件大小的文档。

特定于 Web 的提示和技巧

  • 指定 Crunch 纹理压缩一种存储数据的方法,可减少所需的存储空间量。请参阅纹理压缩动画压缩音频压缩构建压缩
    请参阅术语表
    格式

  • 不部署开发版本开发版本包括调试符号并启用性能分析器。更多信息
    请参阅术语表
    ;它们没有被压缩或缩小,因此文件大小要大得多。

  • “播放器设置”窗口中,(单击“编辑” > 项目设置(Project Settings) 广泛的设置集合,允许您配置物理、音频、网络、图形、输入和项目的许多其他区域的行为方式。更多信息
    请参阅术语表
    > 网络)展开“发布设置”,如果在生成中不需要异常,请将“启用例外”设置为“”。

  • 在 播放器设置(Player settings) > 其他设置(Other Settings) 面板中启用 剥离引擎代码(Strip Engine Code),以确保高效构建。

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

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

有关如何发布压缩版本的详细信息,请参阅部署压缩版本

代码剥离

默认情况下,Unity 会从构建中删除所有未使用的代码。你可以通过 播放器(Player) 设置(菜单:编辑(Edit) > 项目设置(Project Settings),然后选择 播放器(Player) 类别)进行更改:选择 其他设置(Other Settings) 面板以访问 Strip Engine Code 选项。最好在启用剥离的情况下构建。

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

代码剥离问题

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

Could not produce class with ID XXX

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

下面是一个示例,可确保碰撞体(Collider) 用于处理对象物理碰撞的不可见形状。碰撞体不需要与对象的网格体形状完全相同 - 在游戏中,粗略的近似值通常更有效且难以区分。更多信息
请参阅术语表
类,并且 Physics 模块将保留在项目中。将此 XML 代码添加到名为link.xml,然后将该文件放入“资产”文件夹中。

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

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

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

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

移动构建输出文件

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

要更改文件在Build文件夹中,更改其 URL(即dataUrl,wasmCodeUrl,wasmMemoryUrlwasmFrameworkUrl) 添加到index.html文件中的配置变量。

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

增量构建

IL2CPP 为您的项目生成的 C++ 代码是增量编译的;也就是说,仅再次编译自上次生成以来已更改的生成的 C++ 代码。未更改的源代码会重复使用为上一个版本生成的相同目标文件。用于增量 C++ 构建的对象文件存储在Library\Bee\artifacts\WebGL目录。

若要对生成的 C++ 代码执行干净的、从头开始构建,不使用增量编译,请删除Library\Bee\artifacts\WebGL目录。请注意,如果 Unity 编辑器版本与之前 Web 构建中使用的版本不同,Unity 会自动执行干净的、从头开始构建。

Web 中的资产包
优化您的 Web 构建