Unity热更新方案XLua

2023-11-21 21:48
文章标签 更新 unity 方案 xlua

本文主要是介绍Unity热更新方案XLua,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

采用xlua的热更新特性对c#代码进行修复,xlua对应的git地址为 https://github.com/Tencent/xLua

开发准备

工程设置

1、打开HOTFIX特性

添加HOTFIX_ENABLE宏,(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)。编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用API设置的宏是不生效的,需要在编辑器设置。

(建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编译器下开发补丁时打开HOTFIX_ENABLE)

2、执行XLua/Generate Code菜单。

3、注入,构建手机包这个步骤会在构建时自动进行,编辑器下开发补丁需要手动执行"XLua/Hotfix Inject In Editor"菜单。打印“hotfix inject finish!”或者“had injected!”才算成功,否则会打印错误信息。

如果已经打印了“hotfix inject finish!”或者“had injected!”,执行xlua.hotfix仍然报类似“xlua.access, no field __Hitfix0_Update”的错误,要么是该类没配置到Hotfix列表,要么是注入成功后,又触发了编译,覆盖了注入结果。

标识要热更新的类型

在Editor目录下创建HotfixCfg文件,对可进行热更的类进行配置。采用标识Namespace的方式,这样在该Namespace下的类均可进行热更新

#if !XLUA_GENERAL
using UnityEngine;
using UnityEditor;
#endif
using System.Collections.Generic;
using XLua;
using System;
using System.Reflection;
using System.Linq;
public static class HotfixCfg
{[Hotfix]public static List<Type> by_property{get{return (from type in Assembly.Load("Assembly-CSharp").GetTypes()where type.Namespace == "YourNamespace"select type).ToList();}}
}

修复流程

生成热更新资源包

假定线上版本为1.0.0,此时需要发布一个对应的修复版本1.0.0.001

1、在Assets/Hotfix文件夹下创建1.0.0.001文件夹,添加lua补丁luaScript.lua。通过lua脚本对bug进行修复

2、Inspector界面设置补丁代码的AssetBundle标签为1.0.0.001

3、调用Assets/Build AssetBunlde,生成对应的AssetBundle资源

4、将AssetBundle资源上传到cdn服务器。将对应信息和地址填入下方热更新配置表

5、服务器根据配置表下发对应热更新信息

热更新配置表

version

channel

fixVersion

abUrl

1.0.0

all

1.0.0.001

https://xxx.oss/app/hotfix/all/1.0.0.001

1.0.0

huawei

1.0.0.001

https://xxx.oss/app/hotfix/huawei/1.0.0.001

1.0.0

appstore

1.0.0.001

https://xxx.oss/app/hotfix/appstore/1.0.0.001

version:需要修复的版本号

channel:需要修复的渠道号,如果为all则为针对所有平台的修复包,如果为其他,则为具体渠道的修复包。优先判断具体渠道号的渠道包,如果没有则选择全平台修复包。

fixVersion:修复版本的版本号

abUrl:对应assetBundle修复包的地址

注意事项

热更新的lua代码不合到开发主干上。下一个版本直接在c#代码上进行修改。

客户端更新流程图

 

这篇关于Unity热更新方案XLua的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/405312

相关文章

MySQL更新某个字段拼接固定字符串的实现

《MySQL更新某个字段拼接固定字符串的实现》在MySQL中,我们经常需要对数据库中的某个字段进行更新操作,本文就来介绍一下MySQL更新某个字段拼接固定字符串的实现,感兴趣的可以了解一下... 目录1. 查看字段当前值2. 更新字段拼接固定字符串3. 验证更新结果mysql更新某个字段拼接固定字符串 -

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

MySQL中闪回功能的方案讨论及实现

《MySQL中闪回功能的方案讨论及实现》Oracle有一个闪回(flashback)功能,能够用户恢复误操作的数据,这篇文章主要来和大家讨论一下MySQL中支持闪回功能的方案,有需要的可以了解下... 目录1、 闪回的目标2、 无米无炊一3、 无米无炊二4、 演示5、小结oracle有一个闪回(flashb

Android App安装列表获取方法(实践方案)

《AndroidApp安装列表获取方法(实践方案)》文章介绍了Android11及以上版本获取应用列表的方案调整,包括权限配置、白名单配置和action配置三种方式,并提供了相应的Java和Kotl... 目录前言实现方案         方案概述一、 androidManifest 三种配置方式