当前位置: 首页 > news >正文

[Unity实战]热更新如何预防过度裁剪

情景再现

假设你现在有一个游戏客户端,客户端只打包了入口场景,游戏场景都存放在了AB包。

你打的热更包里使用了协程中的waituntil修复游戏场景中空投补给资源加载时机问题,但是打出来的热更在真机跑报如下错误:

TypeLoadException: Could not load type 'UnityEngine.WaitUntil' from assembly 'UnityEngine.CoreModule'.

Chest.Start () (at <00000000000000000000000000000000>:0)

UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <00000000000000000000000000000000>:0)

UnityEngine.StackTraceUtility:ExtractStringFromExceptionInternal(Object, String&, String&)

分析

很明显我们的WaitUntil在打包客户端的时候被裁减了,我们的入口程序集并没有使用WaitUntil,即无明显的引用,导致il2cpp直接裁剪。

热更的原理是在已有代码的基础上操作,然而客户端本身没有。

修复

修复方法比较简单,但也希望读者在后续的项目中规划好项目可能要用到的程序集、命名空间、类型等。

根据官方文档,il2cpp会在编译前找一次link.xml,一般位于Assets文件夹下。

华佗在打热更新时也会在HybridCLRData文件夹下生成link.xml,这两个文件其实可以互通。如果你想现阶段临时解决问题,可以将这个link.xml文件复制到Assets文件夹下,然后重新打包和分发客户端。

link示例

link.xml是一个用于配置Unity引擎在构建时进行代码剪裁的文件。它可以通过保留和删除配置来告诉Unity哪些代码需要保留,哪些可以剪裁,以减少构建后的应用程序的体积。

<linker>

  <assembly fullname="Assembly-CSharp">

    <type fullname="MyNamespace.MyClass" preserve="all" />

  </assembly>

</linker>

以上为一个link.xml的示例。在这个示例中,我们告诉Unity保留了一个来自主程序集中名为MyNamespace.MyClass的类型,以确保它不会被剪裁。

也请注意,如果你在Player Settings选的是strict,那么即便你link.xml明确写了保留部分不代表最后打出来的包一定会保留。

 

 

http://www.lryc.cn/news/341700.html

相关文章:

  • 任务修复实例(8)
  • torch.flatten(x, 1)”和“x.view(x.size(0), -1)”有什么区别?
  • 达梦主从数据库实例恢复
  • JAVA:jsp+springboot 配置maven兼容版本
  • 【Docker】docker部署lnmp和搭建wordpress网站
  • C#装箱拆箱是怎么回事
  • JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)
  • 人力资源管理新视野:挖掘员工潜力,共筑卓越未来
  • rust语言tokio库spawn, blocking_spawn等的使用
  • Day_1
  • 2024.05.06作业
  • 什么是抖音橱窗?它和抖音小店有什么区别?普通人更适合做哪个?
  • spring高级篇(九)
  • 用wordpress建跨境电商独立站的5大优势
  • Windows中安装的PostgreSQL 数据库如何重启
  • Remix框架实现 SSR
  • 如何快速开发项目,提高开发效率
  • 面试笔记——多线程使用场景
  • 02.0 基于Verilog控制LED灯每秒钟闪烁一次
  • C语言创建文件夹和多级目录
  • 2024.5.6
  • mybatis配置获取自增主键
  • 完整、免费的把pdf转word文档
  • 使用 Lua 协程模拟 Golang 的 go defer 编程模式
  • 网络通信协议,UDP和TCP,初步了解
  • Golang | Leetcode Golang题解之第61题旋转链表
  • 美业SaaS系统多门店收银系统源码-【分润常见问题】讲解(一)
  • Chatbot 在教育中的应用
  • Apache和Nginx的区别以及如何选择
  • 深入探索Element-UI:构建高效Web前端的利器