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

做网站卖多少钱一个网站搭建书籍推荐

做网站卖多少钱一个,网站搭建书籍推荐,活动网站推广,wordpress手机菜单分行简介 今天来谈一谈#xff0c;项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列#xff0c;全平台。与xlua的思路类似#xff0c;InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无… 简介 今天来谈一谈项目种的客户端热更新解决方案。InjectFix是腾讯xlua团队出品的一种用于Unity中C#代码热更新热修复的解决方案。支持Unity全系列全平台。与xlua的思路类似InjectFix解决的痛点主要在于Unity中C#代码写的逻辑在发包之后无法更新导致出现了严重的逻辑问题只能通过配置关闭功能或者利用资源更新来绕过bug这类问题。 相比较lua虚拟机热更的优点 相较于一般使用lua这种接入C#来进行热更新的如ulua之类的方案InjectFix直接修改C#即可使用老项目也可以使用只要简单的接入相应的库并依照补丁流程进行相应的操作即可。减少了额外学习一门语言的开销。 使用 官方链接https://github.com/Tencent/InjectFix 1.注入DLL插桩 【InjectFix】-【Inject】来对我们的DLL进行自动插桩需要在编辑器页面。运行这个菜单工具后这时IFix会根据我们提供的Config文件去给这些注册的类里面的每个方法插桩它会直接修改 \Library\ScriptAssemblies\Assembly-CSharp.dll 这个文件正常注入后即可得到一个拥有热更新能力的DLL文件。所以我们需要在Editor目录下配置config文件添加需要热更的类。 原理如下。在.NET的CLR生成MSIL中间层语言时在il代码中增加了一些跳转操作如果检测到补丁就会执行相应的函数本质上是修改了Unity生成的dll临时文件。 图1.1 注入后会修改MSIL代码我们可以在il中清晰地看到这些逻辑。如果IsPatche false, 会跳转到IL_0021否则顺序执行。 2.标注代码制作补丁 当有代码需要更新的时候需要修改相应的代码。这里InjectFix主要提供了三种修改方式。这三种方式都是通过使用Attribute来标注被修改代码的途径来实现的。详细使用方式可以查看官方文档。这里说一下大概都是干什么的以及怎么用。 1.patch(用于修改一个函数) 比如 --- ImmortalGuideRootLogic.cs (revision 323246)ImmortalGuideRootLogic.cs (working copy)-81,6 81,7 public GameObject m_Finished; public UIButton m_GoToGrowGuide; public UILabel m_TipsLabel; //完成和等级不足公用一个label [IFix.Patch] private void Start() { if (m_DayItemList.Length ! GlobeVar.IMMORTALGUIDE_TASKDAYCOUNT) -87,7 88,9 { return; } - //发消息请求仙人指路任务状态 CG_IMMORTALGUIDE_PROGRESS_REQ_PAK pak new CG_IMMORTALGUIDE_PROGRESS_REQ_PAK(); pak.SendPacket(); m_Instance this; m_LeftTime.text ; m_ProgressBonusPanel.SetActive(false); //--------- } 这里代码的修改主要是在Start函数中增加了一些代码。增加了之后给函数标记Patch。这样之后生成Patch的时候就能发现这个函数并生成相应的逻辑了。 2.Interpret(用于新增一个函数或者一个字段等) [IFix.Patch] void OnDestroy() { OnDisable();}[IFix.Interpret] void OnDisable() { m_tabBtnController.delTabWillChange - TabChangeCheck; m_Instance null; GameManager.PlayerDataPool.ChargeLTea.m_DelLTDrink - UpDataChargeTeaRedDot; -72,19 79,21 GameManager.PlayerDataPool.ChargeHTea.m_DelHTDrink - UpDataChargeTeaRedDot; } [IFix.Patch] void UpdateRightBtnShow(TabIndex index, bool bShow) { if((int)index 0 (int)index (int)TabIndex.Count) if((int)index 0 (int)index m_TabObject.Length) {- m_TabObject[(int)index].gameObject.SetActive(bShow); m_TabObject[(int)index].SetActive(bShow); } } 这里主要是想把原来用在Destroy的逻辑放到OnDisable中去。因为没有办法删除函数所以直接删除函数中的逻辑这里去掉了原来Destroy中的逻辑。然后新增了OnDisable函数用来相应相关的逻辑。注意OnDisable在OnDestroy中进行了一次调用。这是因为在生成patch的时候会进行函数的裁剪。如果一个函数没有使用过的话直接就被裁剪掉了。所以这里在别的函数用用一下避免裁剪。 3.CustomBridge(用于告诉外界虚拟机这里有一个类可以用) 因为本质上InjectFix的Patch实现的所有的逻辑都是运行在一个用C#编写的虚拟机中的其实外界并不知道虚拟机中加载了什么样的逻辑。为了通知外界这里有一个逻辑可以让外界调用需要用这个特性标注一下。主要是为了以下这些使用情景。 修复代码赋值一个闭包到一个delegate变量修复代码的Unity协程用了yield return新增一个函数赋值到一个delegate变量新增一个类赋值到一个原生interface变量新增函数用了yield return 3.生成Patch 【InjectFix】-【Fix】生成补丁按照上述方法标注了代码之后就可以生成Patch了。即提取标注的代码放到一个文件里。在Unity的Menu中点击InjectFix-FixAll按钮执行对应的生成逻辑。之后会在Client\IFixPatch路径下生成针对PCios和Android的三个patch包。再根据需要热更到的底包和资源版本号修改名字提交上到CDN。 总结 IFix的原理主要包括两个部分 自动插桩首先在代码里面插桩进入这些的函数的时候判断是否需要热更新如果需要则直接跳转去执行热更新补丁中的IL指令。生成补丁将需要热更新的代码生成为IL指令。 周更 项目的热更新步骤是自动的。整体的过程是取到IFixPatch路径下的patch包。根据其名字取出这个patch对应的底包及资源路径。在执行热更新脚本的过程中将这个patch进行改名然后放到对应的资源更新的路径中作为周更资源的一种进行更新。底包在放出去之后打开进行周更的时候会下载patch包到机器的可读写路径中。加载完资源之后会进行尝试加载patch包的操作。加载了patch包之后如果有被替换的逻辑就会自动执行新的逻辑了。这里可以很显然的看出如果是资源更新完之前的逻辑出问题热更新是无法解决的所以这里需要额外注意。 InjectFix 的缺点 确定注入的函数 要注入哪些函数其实也是根据配置生成的详细可以看看官方文档。目前项目中的做法是注入了所有的Assembly-CSharp中的函数。所以在这之外的比方说firstpass中的函数就没有办法进行热更了。这一步会影响效率。 不能直接修改变量的值 整体的热更方案没有办法修改字段的值。所以如果修改一个变量的值需要修改所有用到这个变量的逻辑。或者把变量改成以属性或者函数的方式来获得。 继承受限制 新增的类不可以继承外界的类。因为新的虚拟机没有实现这么多东西。 性能一般 补丁的逻辑性能很差较外界的正常il2cppHybridCLR差了大概3个数量级。所以频繁操作和复杂逻辑尽量不要热更想办法绕过去。最好能不热更就不热更。 参考资料https://www.jianshu.com/p/adf1cb2dbd3c
http://www.hkea.cn/news/14513800/

相关文章:

  • 悠悠我心的个人网站素材linux新建网站
  • seo百度站长工具查询东莞建设局网站
  • 陇西学做网站开发公众号 微网站开发
  • 国内视差网站网站的反链怎么做
  • 石家庄网站推广北京软件开发公司哪家专业
  • vps网站建站助手怎么免费构建自己的网站
  • 做的好的国外网站二维码制作网站链接
  • 绍兴网站建设费用做甲方去哪个网站应聘
  • 百度关键词推广网站江苏永坤建设有限公司网站
  • 国外网站加速商城小程序开发多少钱
  • 泰安企业建站公司平台北京杰诚 做网站
  • 建立网站需要哪些手续遵义网站开发哪家便宜
  • 免费书画网站怎么做的设计网站推荐外网
  • 国内最好用免费建站系统减肥推广
  • 企业网站建设的案例科技网站大全
  • 韶关网站开发广安做网站
  • 免费网站建站方法国外最大的素材网站
  • 网站开发经理招聘外贸营销员
  • 闵行网站制作设计公司做招商如何选择网站
  • 智能建站平台临沂 网站建设
  • 携程网站的会计工作怎么做建筑毕业设计代做网站
  • 网站源码大全最新28招商加盟网
  • 瑞金建设局网站优化seo公司哪家好
  • 嘉兴建设网站wordpress 缓存在那
  • 免费注册微信小程序百度关键词优化怎么做
  • 减肥瘦身网站模板源码网站准备建设的内容
  • 网站建设项目可行性长春网站制作最专业
  • 建设学校网站需求分析松原网站建设公司
  • 电商商城网站合肥建设管理学校网站首页
  • 网站开发所要达到的目标广州西樵网站制作