![](https://img-blog.csdnimg.cn/20190927151132530.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
xlua
xlua开发
Jack Yan
Unity开发;
Keep Reading , Keep Writing , Keep Coding.
展开
-
XLua官方教程目录 总结篇(配置XLua开发环境、安装EmmyLua插件、xLua文档、xLua热补丁、xLua示例教程)
示例教程01_Helloworld: 快速入门的例子。 02_U3DScripting: 展示怎么用lua来写MonoBehaviour。 03_UIEvent: 展示怎么用lua来写UI逻辑。 04_LuaObjectOrented: 展示lua面向对象和C#的配合。 05_NoGc: 展示怎么去避免值类型的GC。 06_Coroutine: 展示lua协程怎么和Unity协程相配合。 07_AsyncTest: 展示怎么用lua协程来把异步逻辑同步化。 08_Hotfix: 热补丁的示原创 2020-10-13 11:25:18 · 3365 阅读 · 0 评论 -
【Unity技术专题】热更新专题、AssetBundle、Addressable、ILRuntime
热更新专题程序丨入门必看:Unity资源加载及管理 AssetBundle与热更新的科普文 浅谈倩女手游中的资源更新 uLua基础之C#与lua相互调用 AssetBundle入门 【Unity游戏开发】AssetBundle杂记--AssetBundle的二三事 Unity官方AssetBundleDemo 一个不错的热更学习框架 lua热更框架之XLua Unity AssetBundle,Asset,GameObject之间的联系 Unity AssetBundle高效加...原创 2020-10-19 15:44:00 · 578 阅读 · 0 评论 -
【Unity技术专题】Lua相关的一些知识点和测试
1.浅析lua异常捕获处理机制 2.使用lua实现try-catch异常捕获 3.Lua的for in和pairs 4.Unity3d ulua c#与lua交互+wrap文件理解 5.Unity3D 预备知识:C#与Lua相互调用 6.【小白学Lua】之Lua变长参数和unpack函数 7.Lua版本的事件中心管理器 8.lua热更框架之XLua 9.在Unity中调试Lua:IntelliJ IDEA + EmmyLua 10.tolua之wrap文件的原理与使用 11.Lua语法练原创 2020-10-20 09:35:30 · 261 阅读 · 0 评论 -
xlua C#方法中含out ref参数修饰符的注意事项
目录结论:C#函数lua热更新函数lua输入参数lua返回参数更新前后对比结论:C#只能接收一个返回值,其余用out或ref参数修饰符接收,lua函数有多个返回值,out不用输入,ref要有输入根据自己的理解写的一些总结,如有错误,欢迎留言交流C#函数C#只能接收一个返回值,其余用out或ref参数修饰符接收,例如下面函数有3个返回值第一个返回值:ret,定义一个变量接收return第二个返回值:num,out修饰参数调用前不需要初始...原创 2020-10-14 14:23:49 · 2309 阅读 · 0 评论 -
【Unity开发lua】0.EmmyLua插件安装【最新版】
1.下载IntelliJ IDEA社区版2.插件安装EmmyLua的官方QQ群:29850775。加官方QQ群下载相关文件 1. 在群里下载并手动安装最新版本EmmyLua插件,以及EmmyLua-Unity插件 2. 下载 EmmyLuaService.cs 放到Unity工程的Editor目录 3. 打开Unity,点击菜单 EmmyLua -> Enable 来启用API服务 4. 打开IDEA 即可在Lua代码中使用C#端的API提示3....原创 2020-09-23 15:49:24 · 1340 阅读 · 0 评论 -
EmmyLua 断点调试、xlua断点调试
0.设置工程目录1.安装EmmyLua-AttachDebugger插件链接: https://pan.baidu.com/s/1ipuWGyIG0HxnuXx3ttiofg 提取码: sbqm从本地硬盘安装插件方法File/Setting/Plugins/点右上面的小齿轮/Install Plugin fromDisk...查找该插件的放置位置2.创建调试配置2.1打开运行配置页面2.2新建EmmyLuaDebugger(NEW)2.3配置...原创 2020-10-10 11:22:11 · 5030 阅读 · 1 评论 -
XLua官方教程 01 Lua文件加载
Lua文件加载一、执行字符串最基本是直接用LuaEnv.DoString执行一个字符串,当然,字符串得符合Lua语法比如:luaenv.DoString("print('hello world')")完整代码见XLua\Tutorial\LoadLuaScript\ByString目录但这种方式并不建议,更建议下面介绍这种方法。二、加载Lua文件用lua的require函数即可比如:DoString("require 'byfile'")完整代码见XLua\Tutoria原创 2020-09-29 15:40:35 · 664 阅读 · 0 评论 -
XLua官方教程 02 C#访问Lua
C#访问Lua这里指的是C#主动发起对Lua数据结构的访问。本章涉及到的例子都可以在XLua\Tutorial\CSharpCallLua下找到。一、获取一个全局基本数据类型访问LuaEnv.Global就可以了,上面有个模版Get方法,可指定返回的类型。luaenv.Global.Get<int>("a")luaenv.Global.Get<string>("b")luaenv.Global.Get<bool>("c")二、访问一个全局的原创 2020-09-29 15:41:55 · 379 阅读 · 0 评论 -
XLua官方教程 03 Lua调用C#
Lua调用C#本章节涉及到的实例均在XLua\Tutorial\LuaCallCSharp下new C#对象你在C#这样new一个对象:var newGameObj = new UnityEngine.GameObject();对应到Lua是这样:local newGameObj = CS.UnityEngine.GameObject()基本类似,除了:lua里头没有new关键字; 所有C#相关的都放到CS下,包括构造函数,静态成员属性、方法;如果有多个构造函数呢?放心,原创 2020-09-29 15:43:21 · 573 阅读 · 0 评论 -
XLua官方API 01 C# API
目录LuaEnv类LuaTable类LuaFunction类LuaEnv类object[] DoString(string chunk, string chunkName = "chuck", LuaTable env = null)描述:执行一个代码块。参数:chunk: Lua代码文字串;chunkName: 发生error时的debug显示信息中使用,指明某某代码块的某行错误;env :这个代码块的环境变量;返回值:代码块里return语句的返回值;原创 2020-09-29 16:00:55 · 307 阅读 · 0 评论 -
XLua官方API 02 Lua API
目录CS对象typeof函数无符号64位支持xlua.structclonexlua.private_accessible(class) CS对象CS.namespace.class(...)描述:调用一个C#类型的构造函数并返回实例对象,例如:local v1=CS.UnityEngine.Vector3(1,1,1) CS.namespace.class.field描述:访问一个C#静态成员,例如:Print(CS.UnityEngine....原创 2020-09-29 16:02:22 · 494 阅读 · 2 评论 -
XLua官方API 03 类型映射
基本数据类型 C#类型 Lua类型 sbyte,byte,short,ushort,int,uint,double,char,float number decimal userdata long,ulong userdata/lua_Integer(lua53) bytes[] string ...原创 2020-09-29 16:04:36 · 508 阅读 · 0 评论 -
XLua官方教程 00 xLua的配置
xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。打标签xLua用白名单来指明生成哪些代码,而白名单通过attribute来配置,比如你想从lua调用c#的某个类,希望生成适配代码,你可以为这个类型打一个LuaCallCSharp标签:[LuaCallCSharp]public class A{}该方式方便,但在il2cpp下会增加不少的代码量,不建议使用。静态列表有时我们无法直接给一个类型打标签,比如系统api,没源码的库,或者实例化的泛化类型,这时你可以在原创 2020-09-29 16:35:54 · 767 阅读 · 1 评论 -
XLua官方教程 04 XLua性能分析工具
XLua内置两个小工具进行性能方面问题的分析:一个是Lua函数,Lua调用C#函数的时长(不一定等同于CPU耗时,比如协程yield出去那段时间也会被算入调用时间)分析工具;一个是内存泄漏定位工具。函数调用时长分析工具典型使用案例:说明:api很简单,就三个,start和stop都是无参数,也很好理解,分别是统计开始以及结束。在start以及stop之间可以多次调用report(也可以考虑不调stop)。每次report会得到从start到调用report为止的函数时长统计报告(以.原创 2020-09-29 16:40:24 · 1273 阅读 · 4 评论 -
XLua官方教程 05 XLua复杂值类型(struct)gc优化指南
一、复杂值类型的gc问题xLua复杂值类型(struct)的默认传递方式是引用传递,这种方式要求先对值类型boxing,传递给lua,lua使用后释放该引用。由于值类型每次boxing将产生一个新对象,当lua侧使用完毕释放该对象的引用时,则产生一次gc。为此,xLua实现了一套struct的gc优化方案,您只要通过简单的配置,则可以实现满足条件的struct传递到lua侧无gc。二、struct需要满足什么条件?1、struct允许嵌套其它struct,但它以及它嵌套的struct只能包含原创 2020-09-29 16:43:03 · 1310 阅读 · 0 评论 -
XLua官方教程 06 热更新实例 hotfix样例
目录使用方式约束API标识要热更新的类型Hotfix Flag使用建议打补丁使用方式1、打开该特性添加HOTFIX_ENABLE宏,(在Unity3D的File->Build Setting->Scripting Define Symbols下添加)。编辑器、各手机平台这个宏要分别设置!如果是自动化打包,要注意在代码里头用API设置的宏是不生效的,需要在编辑器设置。(建议平时开发业务代码不打开HOTFIX_ENABLE,只在build手机版本或者要在编原创 2020-10-12 11:25:57 · 914 阅读 · 0 评论 -
XLua官方教程 07 生成引擎二次开发指南
生成引擎二次开发xLua的生成引擎支持二次开发,你可以利用它来生成一些文本类型的文件(比如代码,配置等)。xLua本身的link.xml文件的生成就是一个生成引擎插件做的。其它应用场景,比如生成Lua IDE的自动完成配置文件,都可以用这特性来完成。总体介绍插件需要提供两个东西:1、生成文件的模版;2、一个回调函数,该回调函数接受用户的配置,返回需要注入到模版的数据以及文件的输出流。模版语法模版语法很简单,只有三种元素:eval:语法是<%=exp%>,exp是任意表达式,将计算并原创 2020-10-14 09:49:31 · 478 阅读 · 0 评论 -
XLua官方教程 08 通用字节码
通用字节码不少项目希望把项目的lua源码通过luac编译后加载,但官方lua有个缺陷:字节码是分32位和64位版本的,换句话你32位lua环境只能跑32位luac编译出来的东西。为此,xLua尝试对lua源码做了少许改造,可以编译一份字节码,跨平台使用。注意事项1、如果你做了本文所描述的改动,你的xLua将加载不了官方luac所编译的字节码;2、截至2018/9/14,已知此改法在一个上线一个多月的项目正常运行,但不代表此改法在任何情况都没问题。操作指南1、编译xlua的Plugi原创 2020-10-14 09:59:25 · 1145 阅读 · 1 评论 -
XLua官方教程 09 XLua增加删除第三方lua库
What&WhyXLua目前内置的扩展库:针对luajit的64位整数支持; 函数调用耗时以及内存泄漏定位工具; 用于支持ZeroBraneStudio的luasocket库; tdr 4 lua;随着使用项目的增加以及项目使用的深入程度,仅有这几个扩展已经没法满足项目组了,而由于各个项目对扩展差异化比较大,以及手机平台对安装包大小的敏感,XLua是无法通过预集成去满足这些需求,这也是这篇教程的由来。这篇教程,将以lua-rapidjson为例,一步步的讲述怎么往xLua添加c/原创 2020-09-29 16:45:25 · 611 阅读 · 0 评论 -
XLua官方FAQ
FAQxLua发布包怎么用?xLua目前以zip包形式发布,在工程目录下解压即可。xLua可以放别的目录吗?可以,但生成代码目录需要配置一下(默认放Assets\XLua\Gen目录),具体可以看《XLua的配置.doc》的GenPath配置介绍。更改目录要注意的是:生成代码和xLua核心代码必须在同一程序集。如果你要用热补丁特性,xLua核心代码必须在Assembly-CSharp程序集。xLua的配置如果你用的是lua编程,你可能需要把一些频繁访问的类配置到LuaCallCSharp,这些原创 2020-09-30 09:15:10 · 1718 阅读 · 0 评论 -
XLua官方文档 Xlua特性
特性总体Lua虚拟机支持Lua5.3Luajit2.1Unity3D版本支持各版本均支持平台支持windows 64/32androidios 64/32/bitcodeosxuwpwebgl互访技术生成适配代码反射易用性解压即可用开发期无需生成代码生成代码和反射间可无缝切换更简单的无GC api菜单简单易懂配置可以多份,按模块划分,也可以直接在目标类型上打Attribute标签自动生成link.xml防止代码剪裁Plugins部分采用cmake编译,更简原创 2020-10-12 11:52:11 · 817 阅读 · 1 评论 -
XLua官方Examples 01_Helloworld 快速入门的例子
官方第一个例如很简单,lua打印helloworld引入命名空间:using XLua;using UnityEngine;using XLua;namespace XLuaTest{ public class Helloworld : MonoBehaviour { // Use this for initialization void Start() { LuaEnv luaenv = new L.原创 2020-10-12 17:55:17 · 595 阅读 · 0 评论 -
XLua官方Examples 02_U3DScripting 怎么用lua来写MonoBehaviour
1.lua脚本LuaTestScript.lua.txtlocal speed = 10local lightCpnt = nilfunction start() print("lua start...") print("injected object", lightObject) lightCpnt= lightObject:GetComponent(typeof(CS.UnityEngine.Light)) --CS.UnityEngine.Colorendfunction u原创 2020-10-12 18:12:54 · 517 阅读 · 0 评论 -
XLua官方Examples 03_UIEvent 怎么用lua来写UI逻辑
1.lua脚本ButtonInteraction.lua.txtfunction start() print("lua start...")--[[ self:GetComponent("Button").onClick:AddListener(function() print("clicked, you input is '" ..input:GetComponent("InputField").text .."'") end) ]] self:GetComponent("Butt.原创 2020-10-12 18:20:08 · 530 阅读 · 0 评论 -
XLua官方Examples 04_LuaObjectOrented lua面向对象和C#的配合
using System;using UnityEngine;using XLua;namespace XLuaTest{ public class PropertyChangedEventArgs : EventArgs { public string name; public object value; } public class InvokeLua : MonoBehaviour { [CSharp.原创 2020-10-12 18:21:37 · 401 阅读 · 0 评论 -
XLua官方Examples 05_NoGc 怎么去避免值类型的GC
using UnityEngine;using System;using XLua;namespace XLuaTest{ [GCOptimize] [LuaCallCSharp] public struct Pedding { public byte c; } [GCOptimize] [LuaCallCSharp] public struct MyStruct { public MyS..原创 2020-10-12 18:22:30 · 823 阅读 · 0 评论 -
XLua官方Examples 06_Coroutine lua协程怎么和Unity协程相配合
1.coruntine_test.lualocal cs_coroutine = (require 'cs_coroutine')local a = cs_coroutine.start(function() print('coroutine a started') coroutine.yield(cs_coroutine.start(function() print('coroutine b stated inside cotoutine a') coroutine.yie原创 2020-10-13 09:34:13 · 646 阅读 · 1 评论 -
XLua官方Examples 07_AsyncTest 展示怎么用lua协程来把异步逻辑同步化
1.async_test.lualocal util = require 'xlua.util'local message_box = require 'message_box'-------------------------async_recharge-----------------------------local function async_recharge(num, cb) --模拟的异步充值 print('requst server...') cb(true,原创 2020-10-13 09:46:04 · 543 阅读 · 0 评论 -
XLua官方Examples 08_Hotfix 热补丁的示例【1】
1.热更新测试,就一个脚本HotfixTest.csusing UnityEngine;using XLua;namespace XLuaTest{ [Hotfix] public class HotfixTest : MonoBehaviour { LuaEnv luaenv = new LuaEnv(); private int tick = 0; // Use this for initialization原创 2020-10-13 09:50:57 · 309 阅读 · 0 评论 -
XLua官方Examples 08_Hotfix 热补丁的示例【2】
1.C# StatefullTestusing UnityEngine;namespace XLuaTest{ [XLua.Hotfix] public class StatefullTest { public StatefullTest() { } public StatefullTest(int a, int b) { if (a > 0) ...原创 2020-10-13 10:19:33 · 293 阅读 · 0 评论 -
XLua官方Examples 09_GenericMethod 泛化函数支持的演示
1.C# Foousing System;using UnityEngine;using XLua;namespace XLuaTest{ [LuaCallCSharp] public class Foo1Parent { } [LuaCallCSharp] public class Foo2Parent { } [LuaCallCSharp] public class Foo1Child : Foo...原创 2020-10-13 10:23:08 · 349 阅读 · 0 评论 -
XLua官方Examples 10_SignatureLoader 如何读取经数字签名的lua脚本
1.lua文件这几个是原文件,方便查看,调用的是签名文件lua.bytessignatured1.luarequire 'signatured3'print('signatured1: this source was signatured!')signatured2.luaprint('signatured2: this source was signatured!')signatured3.luaprint('signatured3: this source was s原创 2020-10-13 10:43:38 · 527 阅读 · 1 评论 -
XLua官方Examples 11_RawObject 参数是object时,如何把一个lua number指定以boxing后的int传递过去
1.C#RawObjectTestusing UnityEngine;using XLua;namespace XLuaTest{ public class RawObjectTest : MonoBehaviour { public static void PrintType(object o) { Debug.Log("type:" + o.GetType() + ", value:" + o); }.原创 2020-10-13 10:46:37 · 290 阅读 · 0 评论 -
XLua官方Examples 12_ReImplementInLua 如何将复杂值类型改为lua实现
1.C# ReImplementInLuausing UnityEngine;using System.Collections;using XLua;namespace XLuaTest{ [GCOptimize(OptimizeFlag.PackAsTable)] public struct PushAsTableStruct { public int x; public int y; } public class原创 2020-10-13 10:50:06 · 563 阅读 · 2 评论 -
XLua官方Examples 13_BuildFromCLI 使用命令行打包
1.配置build.bat文件注意要有output文件夹,没有要新建@echo offecho =======================================================echo 说明:本示例示范从命令行调用Unity自动化构建。echo C#源码参考BuildFromCLI.csecho.echo 注意1:修改本文件的相关路径:echo UNITY_PATH:unity.exe的完整路径echo PR.原创 2020-10-13 11:17:56 · 414 阅读 · 1 评论