Lua用于游戏运行期热更(不重启游戏客户端)

lua在Unity的热更新中,一般是每次客户端启动的时候检查是否有更新,然后加载。

如果要在运行期热更,跟服务端做不停服热更(比如java 用类构造启动java脚本本身,或者luaJ)是一个道理。

有几个地方:

1.lua查询路径的热更。这个就简单,直接在第一个启动的lua文件里 path..就好了。

2. 可以重新启动luastate,这种方式比较简单。

3.如果不重启luastate,则需要

更新lua文件后,要暂停C#调用lua。

然后手动清除内存中已读进去的lua的byte字节流。

然后再重新加载新的lua文件。

4.  多用require方式。

原文地址:https://www.cnblogs.com/sundayofit/p/8884785.html

时间: 2024-10-08 14:08:55

Lua用于游戏运行期热更(不重启游戏客户端)的相关文章

lua热更框架之XLua

框架介绍 xLua是当下最流行的unity热更方案之一,作者是腾讯的车雄生前辈,自2016年初推出以来,已经在腾讯的多款游戏项目上应用,目前xLua已经开源到了GitHub.xLua最大的特色是不仅支持纯lua脚本热更,更是可以做 C# 代码的bug hotfix,即平时开发时使用C#,项目上线后,如果突然发现有bug,可以直接用lua去修复出bug的地方,原理就是通过[Hotfix]特性标记然后在IL逻辑层判断修改逻辑,使程序去执行更新后的lua逻辑代码而不是走之前的C#逻辑. 框架优势 与别

xLua热更方案

前言: 一直没有做过Lua相关的商业项目,这次总算有机会得到这个机会,并且对游戏前端用xLua进行了实现. 之前在业余的时间里自己经常练手写一些关于uLua的东西,但真正工作用起来,发现业余玩一玩的练手方式其实还是不够的,需要多实践. 之前所了解的一些热更的方案有LuaJit.uLua.sLua.xLua.L#(C# Light)等,最终我们选了xLua的方案. 原因: 1.据我所知,LuaJit和Lua并不是同一门语言. 2.uLua:据我所知,uLua是当前速度最快的Lua,但它所存在的缺陷

GoWorld – 用Golang写一个分布式可扩展、可热更的游戏服务器

GoWorld代码:https://github.com/xiaonanln/goworld Golang具有运行效率高.内存安全等优良特性,因此是非常适合用来进行服务器开发.使用Golang开发游戏服务器有如下的优点: 运行效率远高于各种脚本语言,大幅度提升服务器承载能力 内存安全,不会像C++服务器那样出现内存错误导致服务器down机 Goroutine能够很好地利用多核计算能力,提升承载能力 Golang本身非常简单好用,大家都喜欢 然而使用Golang编写游戏服务器也面临一定的困难,主要

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

什么是热更新,为什么需要热更新?热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来说,受到苹果审核的约束, 一次审核提交需要10~20天不等的等待时间.而这段时间开发进度依然会推进很多,一旦手游上线,第一个版本在玩家疯狂行为下,出点问题是必然的,所以"在线更新" 就成了家常便饭与必然.如果你要求必须整体重新下载完整下载包体,无法热更, 那么10~20多天后,游戏估计就没啥人了. 热更新要解

Java编译期优化与运行期优化技术浅析

Java语言的“编译期”是一段不确定的过程,因为它可能指的是前端编译器把java文件转变成class字节码文件的过程,也可能指的是虚拟机后端运行期间编译器(JIT)把字节码转变成机器码的过程. 下面讨论的编译期优化指的是javac编译器将java文件转化为字节码的过程,而运行期间优化指的是JIT编译器所做的优化. 编译期优化 虚拟机设计团队把对性能的优化集中到了后端的即时编译器(JIT)中,这样可以让那些不是由javac编译器产生的class文件也同样能享受到编译器优化所带来的好处.但是java

晚期(运行期)优化

晚期(运行期)优化 晚期运行期优化 Start HotSpot虚拟机内的即时编译器 几个问题 解释器与编译器 编译对象与触发条件 编译过程 Client Compiler Server Compiler 查看及分析即时编译结果 编译优化技术 公共子表达式消除 数组边界检查消除 方法内联 逃逸分析 Java与CC的编译器对比 ref Start "热点代码"(Hot Spot Code) – 运行特别频繁的方法或代码块:为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本

标识符解析、作用域链、运行期上下文、原型链、闭包

本文讲到的是如何从数据访问层面上提高JS 代码的执行效率.总的来讲有以下几条原则: 函数中读写局部变量总是最快的,而全局变量的读取则是最慢的: 尽可能地少用with 语句,因为它会增加with 语句以外的数据的访问代价: 闭包尽管强大,但不可滥用,否则会影响到执行速度以及内存: 嵌套的对象成员会明显影响性能,尽量少用: 避免多次访问对象成员或函数中的全局变量,尽量将它们赋值给局部变量以缓存. 这么几句话看似简单,但要深刻理解其中的道理则需涉及到JS的 标识符解析.作用域链.运行期上下文(又称为执

【小松教你手游开发】【unity系统模块开发】热更

现在的手游项目如果没个热更新迭代根本跟不上, 特别是像我们项目做mmo的更是需要经常改动代码. 而现在的项目一般会选择用lua的方式实现热更新 不过我们项目由于历史原因没有使用,用的是另外一种方案 在项目里的所有GameObject都不挂脚本(NGUI脚本就通过代码的方式挂上),自己写的脚本都不继承Mono并打成dll,然后通过一个启动脚本去打开这些dll. 不过这样就有个问题,ios不能热更... 不管怎么样,先来讲讲这种方案要怎么做. 首先有两部分,一部分是打包,一部分是解包. 而包又分为资

JVM理论:(四/2)编译过程——晚期(运行期)

一.解释器与编译器 当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为"热点代码" .为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT 编译器). 即时编译器并不是虚拟机必需的部分,但是,即时编译器编译性能的好坏.代码优化程度的高低却是衡量一款商用虚拟机优秀与否的最关键指标之一,它也是虚拟机内中最核心且最能体现虚拟机技术水平的部分. 解释器与编译器两者各有优势: 当程