热更新简介+xLua基础调用

发布于:2025-04-08 ⋅ 阅读:(27) ⋅ 点赞:(0)
什么是冷更新

        开发者将测试好的代码,发布到应用商店的审核平台,平台方会进行稳定性及性能测试。测试成功后,用户即可在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中进行打印输出,代码如下:

 

        

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


网站公告

今日签到

点亮在社区的每一天
去签到