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

热更新简介+xLua基础调用

什么是冷更新

        开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在AppStore看到应用的更新信息,用户点击应用更新后,需要先关闭应用,再进行更新。

什么是热更新

        广义:无需关闭应用,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。

        狭义定义(iOS热更新):无须将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。

        现状:苹果禁止了C#的部分反射操作,禁止JIT(即时编译,程序运行时创建并运行新代码),不允许逻辑热更新,只允许使用AssetBundle进行资源热更新。

        注意:2017年,苹果更新了热更新政策说明,上线后的项目,一旦发现使用热更新,一样会以下架处理

为何要热更新

        缩短用户获取新版应用的客户端的流程,改善用户体验

        具体到iOS平台的应用上,有以下几个原因

                AppStore的审核周期难控制

                手机应用更新频繁

                对于大型应用,更新成本太大

        终极目标

                不重新下载、不停机状态下完全变换一个应用的内容

每个平台如何做热更新

        Android,PC(C#)

                将执行代码预编译为AssemblyDLL

                将代码作为TextAsset打包进AssetBundle

                运行时调用AssemblyDLL代码

                更新相应的AssetBundle即可实现热更新

        iOS(Lua)

                苹果官方禁止iOS下的程序热更新;JIT在iOS下无效

                热更新方案:Unity+Lua插件

常见的Unity热更新插件

        sLua:最快的Lua插件

        toLua:有uLua发展而来的,第二代Lua热更新方案

        xLua:特性最先进的Lua插件

        ILRuntime:纯C#实现的热更新插件

xLua的安装

        官网:https://github.com/Tencent/xLua

在官网上下载压缩包后将Assets文件夹下的四个文件复制粘贴到个人项目工程的Assets文件中即可正确安装xLua

xLua实际应用测试:

        xLua解析器的获得

        DoString函数执行Lua代码

        Lua代码调用C#代码

        C#加载Lua文件

示例代码如下所示:

//C#调用Lua
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua; //使用XLua的命名空间
public class First : MonoBehaviour
{
    void Start()
    {
        //Lua是解释型语言,所以需要获得Lua的解析器

        //xLua解析器获得
        LuaEnv env = new LuaEnv();
        //解析器运行Lua代码,把字符串当成Lua代码执行
        env.DoString("print('Hello World!')");
        //解析器释放
        env.Dispose();
    }
}

 

Lua调用C#代码简单示例代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;

public class DoString : MonoBehaviour
{ 
    void Start()
    {
        LuaCallCSharpCode();
    }
    public void LuaCallCSharpCode()
    {
        LuaEnv env= new LuaEnv();
        //Lua调用C#代码(CS.命名空间.类名.方法名(参数))
        env.DoString("CS.UnityEngine.Debug.Log('Lua调用C#代码')");
        env.Dispose();
    }
    //Lua返回值给C#
    public void LuaReturnData()
    {
        LuaEnv env= new LuaEnv();
        object[] data=env.DoString("return 100,true");
        Debug.Log("Lua的第一个返回值:"+data[0].ToString());
        Debug.Log("Lua的第二个返回值:" + data[1].ToString());
        env.Dispose();
    }
}

若一直像以上代码一样仅在DoStringAPI中使用字符串进行Lua编程未免太过憋屈,我们可尝试是否可以直接调用Lua文件实现在Unity中进行打印输出,代码如下:

 

        

该系列专栏为网课课程笔记,仅用于学习参考。

http://www.dtcms.com/a/111158.html

相关文章:

  • 《AI大模型开发笔记》MCP快速入门实战(一)
  • 英语学习:读科技论文的难处
  • JSON介绍
  • 免费送源码:Java+ssm+MySQL SpringBoot社区配送服务系统小程序 计算机毕业设计原创定制
  • OpenMinus 源码深度解析:从 React 模式到多智能体架构实现
  • 元宇宙浪潮下,前端开发如何“乘风破浪”?
  • OCR的备份与恢复
  • Nacos 如何管理配置版本?支持配置回滚吗?如何实现?
  • 栈回溯和离线断点
  • 2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
  • 4.4 代码随想录第三十五天打卡
  • 生活电子常识--删除谷歌浏览器搜索记录
  • 家里网络访问Github有时候打不开,解决办法
  • kotlin中const 和val的区别
  • 算法刷题记录——LeetCode篇(3.3) [第221~230题](持续更新)
  • Linux环境下内存错误问题排查与修复
  • Mysql 中 ACID 背后的原理
  • 状态机思想编程
  • 《微服务》概念详解
  • MINIQMT学习课程Day7
  • Github 2025-04-04Java开源项目日报 Top8
  • AIP-213 通用组件
  • 【动态规划】深入动态规划:连续子结构的算法剖析
  • 人工智能:RNN和CNN详细分析
  • 死锁(任务互相等待)
  • 无人机智慧路灯杆:智慧城市的‘全能助手’
  • 安当TDE透明加密:海量文件离线传输的安全方案
  • Linux(CentOS 7) 部署 redis 集群
  • 优化 Web 性能:处理屏幕外图片(Offscreen Images)
  • prism WPF 登录对话框登录成功后显示主界面