• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

756915370/LuaRuntimeHotfix: Lua runtime update module in unity

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称(OpenSource Name):

756915370/LuaRuntimeHotfix

开源软件地址(OpenSource Url):

https://github.com/756915370/LuaRuntimeHotfix

开源编程语言(OpenSource Language):

C# 89.3%

开源软件介绍(OpenSource Introduction):

LuaRuntimeHotfix

This project demonstrates the unity editor's ability to make lua changes take effect immediately without replay the game.

这个工程展示了unity编辑器下不需要重启游戏就能让lua文件改动后立刻生效的功能。
目前实现的功能:

  • 保留旧模块的数据,替换旧模块的函数
  • 其它模块缓存了旧模块的函数的处理
  • upvalue值的处理
  • 需要更新的模块的元表的处理
  • 处理了表循环引用导致无限递归的情况(2020.8.17更新)

使用的unity版本是2019.3.0,根目录下是xlua版本的工程/Tolua_RuntimeHotfix是tolua版本的工程。

  • package.load[filename] 获取已加载的模块失败怎么办?
    请检查是不是filename这个变量传入有误,FileSystemEventArgs.FullPath是文件的完整路径,如 "F:\Git\LuaRuntimeHotfix\Assets\LuaScripts\NewDirectory1\Test.lua",需要转化成 "NewDirectory1.Test" 才能正确的调用package.load
    关于文件路径转化的代码在LuaFileWatcher.cs,如果有需要请自行修改。

打开工程里的场景SampleScene,里面是一个方块,功能很简单,按上下可以移动方块。其中逻辑是写在lua里面的。

  • 如何验证热重载功能?
    改动PlayerMove.lua的update函数,比如把10改成-10,会发现方块会倒着走了。
local function Update(self,deltaTime)
    local verticalInput = CS.UnityEngine.Input.GetAxis("Vertical")
    local movement = self.transform.forward * verticalInput * 10 * deltaTime
    self.rigidbody:MovePosition(self.rigidbody.position + movement)
end

在这里插入图片描述


工程里各个脚本的作用: 在这里插入图片描述

左边是C#文件:

  • LuaFileWatcher,检测lua文件发生变化,当发生变化时调用Hotfix.lua进行重载模块的操作。
  • GameLaunch,启动LuaFileWatcher,启动XLuaManager
  • XLuaManager,启动lua端的GameMain模块,并且获取lua端的update函数,并在自己的update函数里调用lua端的update

右边是Lua文件:

  • GameMain,新建一个PlayerMove的实例,调用PlayerMove里面的update
  • PlayerMove,继承自BaseClass,控制方块移动
  • BaseClass,面向对象编程里的基类
  • Hotfix,重载lua模块

关于代码的讲解:

游戏聊天群:891809847




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap