在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Xlua官网 https://github.com/Tencent/xLua 一、xLua的导入和hotfix的配置 1.首先在github上下载好xlua插件,解压后有一个xLua-master文件,打开里面的Assets文件夹,将其里面的文件全部复制粘贴到自己的Unity工程项目里面(放在自己工程的Assets目录下) 2.配置热更新的宏:在Unity中打开File-->Build Settings-->Player Settings-->找到当前发布平台(PC或Android等)的Other Settings中的Scripting Define Symbols, 然后在下面输入:HOTFIX_ENABLE,然后按下回车键即可配置完成。 2.然后将xLua-master文件里的Tools文件夹复制到自己Unity工程的根目录下(即该Tools文件夹与自己工程Assets文件夹位置并列。 3.找到自己Unity的安装位置,按D:\Unity\UU\Unity2017.3\Editor\Data\Managed打开(具体情况看个人安装位置),然后找到Unity.Cecil.dll、Unity.Cecil.Mdb.dll、Unity.Cecil.Pdb.dll 三个文件,将其复制粘贴到自己的工程中的Assets/XLua/Src/Editor下
可以看到在Unity的顶上窗口中多出了XLua一栏,点击发现有三个选项 Generate Code主要用来生成代码,当自己在VS中的代码发生修改后,必须要先点击该项来重新生成代码,然后控制台会有输出打印信息: 注意一定要等待Unity编译后再选择:Hotfix Inject In Editor,即等待Unity右下方的转动标志消失,然后可以看到控制台打印输出一行:had injected或者finished,说明注入成功。 特别注意1:Unity的工程项目路径一定不要出现中文,否则无法热更新,所有路径一点中文都不能出现,一定一定一定要注意!!!踩坑证实 特别注意2:当发布项目的时候,可能会出现奇怪的报错,这个时候需要将Project视图下的Xlua文件夹里的Example全部删除掉,然后发现又出现各种报错,这个时候需要点击顶上视图的XLua的Clear Generated Code,意思是清空已生成的代码,然后再点击Generate Code、Hotfix Inject In Editor即可全部配置完成 二、正式开始打热补丁 新建一个类叫HotFixScript,将其挂在场景中的游戏物体中,打开编辑它,首先引入XLua命名空间,然后定义创建lua虚拟机,然后通过loader加载的方式在C#这边调用lua代码,注意lua代码可以用记事本创建,将后缀名改为.lua.txt, 我的脚本叫做fish.lua.txt, 可以在fish.lua.txt中写上几行代码,如写上:print("HelloWorld") 我的代码如下: using System.Collections; public class HotFixScript : MonoBehaviour { private LuaEnv luaEnv; void Start () { void Update () { void OnDisable() 编辑好后,在Unity中选择顶上视图中的XLua,选择Generate Code,编辑好后,再选择Hotfix Inject In Editor,可以看到Unity控制台输出HelloWorld。 三、给自己的代码打热补丁 找到自己需要修改的类中,首先引入命名空间。打开它在类名的上一行打上标签:[HotFix],然后在需要修改的方法名上方打上标签:[LuaCallCSharp] 然后找到刚刚新建的文本文件fish.lua.txt,打开,编辑它:
local UnityEngine = CS.UnityEngine xlua.private_accessible(CS.Gun) --由于C#中类的私有成员Lua访问不到,所以需要加该行代码 如上,Treasour是C#需要修改的类,CreatePrize是该类中要修改的方法,后面的function即是lua用来替代该方法的Lua函数 然后还要记得另外创建一个fishDispose.lua.txt文件用来清空方法的引用,否则当lua虚拟机释放后会报错,在上面的HotFixScript的OnDisable方法中已写调用了该方法,在fishDispose.lua.tx写上: 然后在Unity中又执行操作:生成代码、注入编辑器。(只有当VS中的代码有改变时才执行这两步,.lua.txt中代码发生改变不需要执行这两步操作) 注意:Clear Genearted Code ,当lua代码出现非语法错误时,可以尝试该选项,然后再重新生成代码,注入编辑器 |
请发表评论