unity strip level导致的编译运行问题

77 Lv2

问题现象

unity 导出的 webGL 微信小程序,运行时,总是报错方法签名异常,以及某些实例初始化失败,再三确认后代码逻辑没有问题,但是报错依旧存在。

2025-02-17-11-03-15.png

2025-02-17-11-03-28.png

问题原因

  1. projects settings 中的managed stripping level 设置为 high,导致unity导出的webgl代码中,部分方法被切割删除,导致运行时,报错。

  2. Unity 会在构建过程中对代码进行裁剪,以减小最终应用的体积,尤其是在进行 IL2CPP 或 AOT(Ahead of Time)编译时。默认情况下,Unity 会剔除所有未被直接使用的代码,这就会导致
    可能会误删一些通过反射等方式间接调用的类、方法或字段。

  3. 当设置 managed stripping level 为 high 时,Unity 会更激进地剔除代码,可能会误删一些你需要的程序集或功能,因此你需要通过 link.xml 文件显式地保留这些程序集中的内容。

解决方案

添加 link.xml

在 Unity 项目中,link.xml 文件的作用是告诉 Unity 编译器在进行代码裁剪(stripping)时,哪些程序集、类、方法或字段应该被保留,而不被剔除。

1
2
3
4
5
<?xml version="1.0" encoding="utf-8"?>
<linker>
<assembly fullname="ZeusSDK" preserve="all"/>
<assembly fullname="Granite" preserve="all"/>
</linker>

这段代码的作用是告诉 Unity 保留 ZeusSDK 和 Granite 这两个程序集中的所有类和成员,无论它们是否被直接引用。

  • 标题: unity strip level导致的编译运行问题
  • 作者: 77
  • 创建于 : 2025-02-13 10:54:23
  • 更新于 : 2025-02-17 11:21:07
  • 链接: https://www.jiaheqi.cloud/2025/02/13/unity-strip-level导致的编译运行问题/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
unity strip level导致的编译运行问题