前言

我们有一个用Unity引擎开发了二十个月的mmo arpg手游项目,在安卓已经测试三轮了,出于IOS的热的考虑且结合我们的情况:全部代码都是纯C#开发非Lua,所以计划使用ILRuntime热更,这里记录我们把这个项目用上ILRuntime热更的过程,包括遇到的困难和如何解决的。其它类型项目或其它项目架构的重点问题可能不一样

项目环境:ILRuntime版本 1.6.3 , Unity版本:2018.4.15f1

ILRuntime热更遇到问题

把项目大部分代码都搬到ILRuntime执行后,先说说从表现上我们遇到的问题:

GC Allow非常频繁

​ 每隔5秒左右就会执行一次GC Allow,每次耗时200ms导致降帧,在手机上的GC Allow间隔时间会长一些

对象管理耗时

​ 每个对象的update耗时在0.5~1ms,当场景内有100个对象时,只有几帧,基本卡住不动了。

​ 对象管理耗时主要分布在对象的状态维护,对象显示/隐藏,头顶文字处理

空函数调用

​ 一些空的Update函数调用,耗时在0.7ms

资源创建和销毁

​ 在战斗过程中,技能特效的加载和创建第一次会顿一下

多人帧率低

​ 场景内多人移动时,帧率会降低

界面打开瞬间掉帧

​ 在界面第一次打开时,掉帧特别明显,这是因为在界面打开时有很多的逻辑

官方建议这些内容放主工程

通过咨询ILRuntime的作者蓝大,他建议把这些内容放在主工程

  • 移动
  • 资源管理
  • UI框架
  • 头顶文字
  • 战斗(视情况是否放主工程)
  • 对象管理放主工程

而我们项目由于完成度高,代码交叉调用多,只有极少部分内容放在主工程,其它内容全部放在热更工程中

通过Profiler看问题

好在是C#代码,把热更代码生成dll之后,在Unity的Profiler中查看耗时大的函数,可以看到具体的文件和函数名,这为排查重点耗时大户提供了极大的便利。

通过在Profiler中看到最大头的部分:

  1. 游戏中每个对象的update函数
  2. 红点检测会频繁遍历背包
  3. 一些网络包的处理
  4. 某些逻辑代码存在重复注册事件,或多次进入玩法出现函数重复调用

为什么对象的Update耗时会这么大?因为在主城中,一个地图中所有的npc,传送点,采集物都是由客户端本地管理,就算不在视野内也会执行Update,只是外观不显示。

而玩家则是由服务器的视野来控制,不在视野内的对象不会存在于客户端。

我们的解决方案

目前我们已经采取的解决方案有这些:

  1. 每个对象的Update进行分帧处理,不在同一帧处理,注意:仅对静止对象这样处理

  2. 去掉空的Update

  3. 把foreach改成for

  4. 把全局变量改成局部变量

  5. 修改红点的部分逻辑,避免每秒计算结果

临上线项目使用ILRuntime热更的更多相关文章

  1. lua热更框架之XLua

    框架介绍 xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub.xLua最大的特色是不仅支 ...

  2. 客户端热更新框架之UI热更框架设计(上)

    什么是热更新,为什么需要热更新?          热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来 ...

  3. Unity热更方案汇总

    http://www.manew.com/thread-114496-1-1.html   谈到目前的代码热更方案:没什么特别的要求   <ignore_js_op>    toLua(效 ...

  4. unity 热更方案对比

    现在一般使用的方案有:tulua&ulua.xlua.ILRuntime 对比: tulua&ulua 方案成熟,稳定第三方库支持 xlua 之前是为了热更修复线上bug的,腾讯发起的 ...

  5. 实现iOS图片等资源文件的热更新化(三):动态的资源文件夹

    简介 此文,将尝试动态从某个不确定的文件夹中加载资源文件.文章,会继续完善自定义的 imageNamed 函数,并为下一篇文章铺垫. 这么做的意义 正如我们经常所说的那样,大多数情景知道做事的意义往往 ...

  6. 实现iOS图片等资源文件的热更新化(五): 一个简单完整的资源热更新页面

    简介 一个简单的关于页面,有一个图片,版本号,App名称等,着重演示各个系列的文章完整集成示例. 动机与意义 这是系列文章的最后一篇.今天抽空写下,收下尾.文章本身会在第四篇的基础上,简单扩充下代码, ...

  7. 实现iOS图片等资源文件的热更新化(零): 序

    必要的序 以后在写系列文章,准备把基本的规划和动机等,单独作为一个小的序言部分给独立出来.序言部分,可以较为完整地交待系列文章的写作动机,所展示的编码技术可能的应用场景等.个人,我还是比较看重文章或者 ...

  8. 我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain 用于 热更新

    大家好,  我发起了一个 .Net Core 平台上的 开源项目 ShadowDomain  用于 热更新 . 简单的说, 原理就是 类似 Asp.net 那样 让 当前 WebApp 运行在一个 A ...

  9. Unity 代码编译成dll 更新dll实现热更代码

    Unity 代码编译成dll 更新dll实现热更代码 实现流程 代码编译成DLL DLL打包成AssetBundle 加载AssetBundle 加载代码程序集 获取指定类 使用反射赋值 C#代码编译 ...

  10. Elasticsearch之中文分词器插件es-ik的自定义热更新词库

    不多说,直接上干货! 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟       ...

随机推荐

  1. Python 获取控制台输入的值

    获取控制台输入参数 if __name__ == '__main__': while 1: question = input('用户:') answer = "你的问题是:" + ...

  2. Building wheel for opencv-python (pyproject.toml) ,安装命令增加 --verbose 参数

    安装时间较长,通过 --verbose 参数 可以看在不在继续 Mac 安装 paddlehub 出现 Building wheels for collected packages: opencv-p ...

  3. Ubuntu 安装 MySQL 5.7

    一.安装MySQL 1. 删除Mysql 数据库 sudo apt autoremove --purge mysql-server-* sudo apt remove mysql-server sud ...

  4. 通义千问,阿里版ChatGPT,拿到邀请码了

    大家好,我是章北海mlpy 通义千问是阿里巴巴推出的一个大型预训练模型,是达摩院自主研发的超大规模语言模型,能够回答问题.创作文字,还能表达观点.撰写代码. 昨天中午,阿里云通过官方微信公众号对旗下的 ...

  5. Spark Final-Examination Note

    重点 4567,Special 4,5 3道编程题,分值 35(基本书上,不超纲) 选填各 20分,简答 5 题/25分,编程题 3题/35分. 简答题参考每章课后习题 第 1 章简答题 1. 请阐述 ...

  6. 洛谷P1174 打砖块 | CCPC2021网络赛8.28 1011 动态规划 分组背包

    本文学习自洛谷社区 喜提CCPC2021网络赛原题 题意相当于是要在每一列中选若干个砖块打掉,消耗所需的子弹数并得到对应的得分.最大化k个子弹能得到的最大得分. 预处理出第 \(i\) 列 \(j\) ...

  7. Educational Codeforces Round 106 (Rated for Div. 2) 简单题解(A~C)

    1499A. Domino on Windowsill 题意:给定一个 \(2 \times n\) 的空间,\(k1.k2 行要设置为白色(2 \times 1)\) 然后其他的设置为黑色 思路:为 ...

  8. @Constraint注解,做特殊的入参校验

    // @Constraint 是 Java 中的注解之一,用于标记自定义的约束注解.约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性. @Constraint(validatedB ...

  9. 10、SpringBoot-mybatis-plus-druid多源数据

    系列导航 springBoot项目打jar包 1.springboot工程新建(单模块) 2.springboot创建多模块工程 3.springboot连接数据库 4.SpringBoot连接数据库 ...

  10. treeselect 表单验证解决方法

    https://www.cnblogs.com/wxqworld/p/11203603.html