lua解析器voidStart(){//Lua解析器能够让我们在Unity中执行Lua//一般情况下保持它的唯一性LuaEnvenv=newLuaEnv();//执行Lua语言env.DoString("print('你好世界')");//执行一个Lua脚本Lua知识点:多脚本执行require//默认寻找脚本的路径是在Resources下并且因为在这里//估计是通过Resources.Load去加载Lua脚本txtbytes等等//所以Lua脚本后缀要加一个txtenv.DoString("require('Main')");//帮助我们清除Lua中我们没有手动释放的对象垃圾回收//帧更新
xlua源码分析(六)C#与lua的交互总结Push基础类型lua数据结构值类型引用类型Get基础类型lua数据结构值类型引用类型上一节我们分析了xlua对struct类型所做的优化,本节我们系统性地梳理一下xlua中C#与lua的交互。所谓C#与lua的交互,其实主要就分为两部分,第一是往lua层中传数据,第二则是从lua层中取数据。Push往lua层中传数据定义为Push,在C#的ObjectTranslator类中,可以看到Push所有支持类型到lua层的入口函数:publicvoidPushByType(RealStatePtrL,Tv){Actionpush_func;if(tryG
Unity-XLua(38)-定义C#泛型方法与扩展方法lua接收C#方法返回的多个结果数值基本规则:参数的输入输出属性(out,ref)A:C#的普通参数算一个输入形参,ref修饰的算一个输入形参,out不算,然后从左往右对应lua调用的实参列表。B:Lua调用返回值处理规则:C#函数的返回值(如果有的话)算一个返回值,out算一个返回值,ref算一个返回值,然后从左往右对应lua的多返回值。lua调用C#泛型方法基本规则:lua不直接支持C#的泛型方法,但可以通过扩展方法功能进行封装后调用。使用Extensionmethods(扩展方法)技术就是C#中在不改变原始类的基础上,使用一种机制可
目录一、xLua概述1.1xLua简介1.2xLua安装二、Lua文件加载2.1执行字符串2.2加载Lua文件2.3自定义loader三、xLua文件配置3.1打标签3.2静态列表3.3动态列表四、Lua与C#交互4.1C#访问Lua4.1.1获取一个全局基本数据类型4.1.2访问一个全局的table4.1.3访问一个全局的function4.2Lua调用C#4.2.1newC#对象4.2.2访问C#静态属性,方法4.2.3访问C#成员属性,方法4.2.4访问父类属性,方法4.2.5参数的输入输出属性(out,ref)4.2.6重载方法4.2.7操作符4.2.8参数带默认值的方法4.2.9可变
1前言 本文主要讲xLua的基本使用。看完有个基本认识还是可以了,简单的热更操作还是可以做到的,但更多细节内容依旧需要从官方文档中了解、学习。2xLua2.1什么是xLua xLua是由腾讯维护的一个开源项目,我们也可以将其看做一个插件。xLua为Unity、.Net、Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。通常作为Unity的一种热更新解决方案。2.2xLua安装 需要先在github上下载,地址:https://github.com/Tencent/xLua。进入网址后,按如下操作下载(别问
1、Lua脚本 入口脚本print("OK")--也会执行重定向require("Test")测试脚本print("TestScript")testNum=1testBool=truetestFloat=1.2testStr="123"functiontestFun() print("无参无返回")endfunctiontestFun2(a) print("有参有返回") returnaend2、C#脚本(1)获取全局变量publicclassL4:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//自己编写的
Xlua生成wrap文件,自带添加了ref字段报错例如Material生成MaterialWrap时,EnableKeyword(inLocalKeywordkeyword);带着in关键字,所以在Wrap文件中会自动在参数前生成ref关键字导致编译不过解决办法:换Xlua版本就好了,也不知道我xlua当时从哪个版本copy过来的,换了xlua-master里的Xlua源码,再次生成wrap就没问题了。 打包时XluaWrap文件报错:Assets\XLua\Gen\UnityEngine_AudioSourceWrap.cs(169,57):errorCS1061:'AudioSource
//引用命名空间usingXLua;publicclassL1:MonoBehaviour{//StartiscalledbeforethefirstframeupdatevoidStart(){//Lua解析器让我们在Unity中使用luaLuaEnvenv=newLuaEnv();//执行env.DoString("print('OK')");//执行一个Lua脚本在resource文件夹下env.DoString("require('Main')");//垃圾回收env.Tick();//销毁Lua解析器env.Dispose();}}这样只能读取Resources文件夹下的脚本,但是我
一、什么是xLuaxLua为Unity、.Net、Mono等C#环境增加Lua脚本编程的能力,借助xLua,这些Lua代码可以方便的和C#相互调用。xLua是用来实现Lua代码与C#代码相互调用的插件。我们可以借助这个插件来实现热更新方案。那么为什么要选择Lua实现热更新呢?这是因为Lua具有轻量、灵活的特点,可以在几乎任何平台上编译、运行。Unity一般使用C#代码编写游戏逻辑。在打包时,C#会先编译成IL(中间语言),存储到dll(动态链接库)中。在游戏运行时,需要通过JIT(即时编译)将IL解释为机器码。在这期间,会开辟一块内存空间,且要求这块空间可读、可写、可执行。但IOS平台是不允许
问题背景编写Lua代码时使用Unity的Api没有代码提示影响效率,需要一个类型系统和代码提示,下面来解决这个问题支持类型系统Lua是动态语言,不支持声明变量类型,需要从语言外入手。有个插件叫EmmyLua,可以使用添加特殊注释的方式构建类型系统,形如---@classCS.UnityEngine.Vector3:CS.System.ValueType---@fieldkEpsilonnumber---@fieldkEpsilonNormalSqrtnumber---@fieldxnumber---@fieldynumber---@fieldznumber---@fieldzeroCS.Uni