UH2S2L19——Lua调用协程
UH2S2L19——Lua调用协程 本章代码关键字 12"xlua.util" --xlua提供的一个工具表,协程相关的内容就在里面util.cs_generator --将函数转化为MonoBehaviour可用的协程 调用协程 Lua中调用MonoBehaviour的协程分三个部分 首先需要获取一个继承MonoBehaviour的类,通过它来调用StartCoroutine方法来启动协程 作为协程的函数,使用coroutine.yield可挂起协程,返回的内容还是Unity挂起协程需要返回的内容 作为协程的Lua函数不能直接传入到StartCoroutine,需要加载 "xlua.util"...
UH2S2L18——特殊问题
UH2S2L18——特殊问题 二维数组遍历 先在C#脚本内声明如下内容 12345678910public class Lesson8{ public int[,] array = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } }; public void SetValue(int[,] array, int value, int index1, int index2) { array[index1, index2] = value; }} 获取长度 二维数组的获取某个列或者行的长度是通过GetLength()来获取的,Lua中也可以调用该方法 12345local obj = CS.Lesson8()--获取长度print("行: " .....
UH2S2L17——Lua调用委托和事件
UH2S2L17——Lua调用委托和事件 调用委托 委托在Lua中和C#中商业差不多,唯一需要注意的是,当委托为空时不能直接加,要用=,之后才能加 事件的方法加减需要使用这种格式对象:事件名("+/-", 函数变量),且不能直接清空,必须要在C#类里执行实现清空方法再通过Lua调用 先在C#脚本内声明如下内容 12345678910111213public class Lesson7{ //申明委托和事件 public UnityAction del; public event UnityAction eventAction; public void DoEvent() { if (eventAction != null) eventAction(); }} 委托是用来装函数的,使用C#中的委托,就是用来装lua函数的 向委托添加函数 Lua中没有复合运算符 不能+=,如果第一次往委托中加函数...
UH2S2L16——Lua调用重载函数
UH2S2L16——Lua调用重载函数 本章代码关键字 12typeof(CS.类名):GetMethod(方法名, {参数列表}) --反射获取类的方法信息,通过xlua的方法可以转化为函数xlua.tofunction() --xlua提供的将通过反射获取的方法信息转化为函数的方法 调用重载函数 先在C#脚本内声明如下内容 12345678910111213141516171819202122public class Lesson6{ public int Calc() { return 100; } public int Calc(int a, int b) { return a + b; } public int Calc(int a) { return a; } public float Calc(float a) ...
UH2S2L15——Lua调用带out和ref的函数
UH2S2L15——Lua调用带out和ref的函数 调用带out和ref的函数 多个out,ref参数用多返回值接收 out参数 注意:out在Lua中不算参数如果有返回值 第一个返回值就是返回值 之后依次返回out ref参数 注意:ref和out不同,在Lua中算参数,我们必须传入一个值 先在C#脚本内声明如下内容 1234567891011121314151617181920212223public class Lesson5{ public int RefFun(int a, ref int b, ref int c, int d) { b = a + d; c = a - d; return 100; } public int OutFun(int a, out int b, out int c, int d) { b = a; c = d; return 200; } ...
UH2S2L14——Lua调用拓展方法
UH2S2L14——Lua调用拓展方法 本章代码关键字 1[LuaCallCSharp] //声明拓展方法的类必须要加上该类才能在Lua中调用,而其他Lua会调用的类也可以使用该特性,可提升性能 调用拓展方法 在Lua中调用拓展方法和使用成员方法是一致的, 但前提是,需要为拓展方法所在的类需要使用 [LuaCallCSharp] 特性,并生成代码Generate Code 12345678910111213141516171819202122[LuaCallCSharp]public static class Tools{ public static void Move(this Lesson4 obj) { Debug.Log(obj.name + "移动"); }}public class Lesson4{ public string name = "唐老狮"; public void Speak(string...
UH2S2L13——Lua调用数组、List和Dictionary
UH2S2L13——Lua调用数组、List和Dictionary 本章代码关键字 123456CS.System.Array.CreateInstance() --创建数组CS.System.Collections.Generic.List() --创建列表,之后还需要再实例化才可用CS.System.Collections.Generic.Dictionary() --创建字典,之后还需要再实例化才可用字典:get_Item() --通过键获取值,在Lua里创建的字典只能用该方法字典:set_Item() --对键设置值,在Lua里创建的字典只能用该方法字典:TryGetValue() --尝试获取值,第一个返回的是是否成功获取值,第二个返回的是具体的值 调用数组 先在C#脚本内声明如下内容 123456public class Lesson3{ ...
UH2S2L12——Lua调用枚举
UH2S2L12——Lua调用枚举 本章代码关键字 1枚举.__CastFrom() --数值或字符串转对应枚举函数 调用枚举 枚举的调用规则 和 类的调用规则是一样的,相对于类来说,枚举不存在实例化操作 使用 CS.命名空间.枚举名.枚举成员即可调用,也支持取别名 123PrimitiveType = CS.UnityEngine.PrimitiveTypeGameObject = CS.UnityEngine.GameObjectlocal obj = GameObject.CreatePrimitive(PrimitiveType.Cube) 调用自定义声明的枚举也很简单,和调用自带枚举一样调用即可CS.命名空间.枚举名.枚举成员(注意命名空间) 123456public enum E_MyEnum{ Idle, Move, Atk,} 123E_MyEnum = CS.E_MyEnumlocal c =...
UH2S2L11——Lua调用C#类
UH2S2L11——Lua调用C#类 本章代码关键字 123456789101112131415--Lua调用C#的类CS.命名空间.类名CS.UnityEngine.类名CS.类名 --不加命名空间--实例化对象CS.命名空间.类名--静态方法与变量CS.命名空间.类名.方法CS.命名空间.类名.变量--成员方法与变量实例化对象.变量实例化对象:方法 --不要忘记加:!!!,因为Lua里表的方法想要调用表本身需要冒号--技巧别名 = CS.命名空间.类名 --该变量将执行对应的类,可以简化名称并优化性能Lua不支持无参泛型方法,因此需要使用对应的传入Type类型参数的方法 启动Lua脚本 Lua没有办法直接访问C#,一定是先从C#调用Lua脚本后,才把核心逻辑交给Lua来编写 因此需要一个Main脚本,通过它来启动一个Lua入口脚本 12345678910using UnityEngine;public class Main : MonoBehaviour{ void Start() ...
UH2S2L10——表映射到LuaTable
UH2S2L10——表映射到LuaTable 本章代码关键字 1234LuaTable //可以用于映射Lua中表的一种类,是引用拷贝,建议少用,因为会产生垃圾luaTable.Get<>() //获取表中的变量luaTable.Set<>() //修改表中的变量,会影响Lua中的表的值luaTable.Dispose() //销毁luaTable,若不销毁,则将一直占用内存! LuaTable 我们在C#脚本里调用Lua解析器的_G表时,其实我们就是在对其返回的LuaTable操作 同样的,我们可以用LuaTable来获取Lua中的表 先在Lua脚本声明如下内容 123456789TestClass = { testInt = 2, testBool = true, testFloat = 1.2, testString = "123", testFun = function() ...