本文共 2606 字,大约阅读时间需要 8 分钟。
01.访问一个全局的function
仍然是用Get方法,不同的是类型映射。 1、映射到delegate 这种是建议的方式,性能好很多,而且类型安全。缺点是要生成代码(如果没生成代码会抛InvalidCastException异常)。 delegate要怎样声明呢? 对于function的每个参数就声明一个输入类型的参数。 多返回值要怎么处理?从左往右映射到c#的输出参数,输出参数包括返回值,out参数,ref参数。 参数、返回值类型支持哪些呢?都支持,各种复杂类型,out,ref修饰的,甚至可以返回另外一个delegate。 delegate的使用就更简单了,直接像个函数那样用就可以了。 2、映射到LuaFunction 这种方式的优缺点刚好和第一种相反。 使用也简单,LuaFunction上有个变参的Call函数,可以传任意类型,任意个数的参数,返回值是object的数组,对应于lua的多返回值。 四、使用建议 1、访问lua全局数据,特别是table以及function,代价比较大,建议尽量少做,比如在初始化时把要调用的lua function获取一次(映射到delegate)后,保存下来,后续直接调用该delegate即可。table也类似。 2、如果lua测的实现的部分都以delegate和interface的方式提供,使用方可以完全和xLua解耦:由一个专门的模块负责xlua的初始化以及delegate、interface的映射,然后把这些delegate和interface设置到要用到它们的地方。02.调用Lua中无参数的全局方法
Hero={ name,hp,mp,attack}function Attack1() print("无参方法1")endfunction Attack2(a) print("有参方法2"..a)endfunction Attack3(a) return "有一个返回值的方法:"..a*20;endfunction Hero:New() H={ }; MH={ __index=self} setmetatable(H,MH); return H;end--NewPerson=Hero:New();
using System.Collections;using System.Collections.Generic;using System;using UnityEngine;using XLua;using System.IO;public class GetFunction : MonoBehaviour { private LuaEnv luaEnv; void Start () { luaEnv=new LuaEnv(); luaEnv.AddLoader(CustomLoaders); luaEnv.DoString("require'LoadLuaFour.lua.txt'"); Action action=luaEnv.Global.Get03. 1、访问lua全局数据,特别是table以及function,代价比较大,建议尽量少做,比如在初始化时把要调用的lua function获取一次(映射到delegate)后,保存下来,后续直接调用该delegate即可。table也类似。 2、如果lua测的实现的部分都以delegate和interface的方式提供,使用方可以完全和xLua解耦:由一个专门的模块负责xlua的初始化以及delegate、interface的映射,然后把这些delegate和interface设置到要用到它们的地方。("Attack1");//映射Lua中的无参数方法attack1 Action
function addReturn(a,b)return a+b,a-b,a*b;end
//通过LuaFunction访问Lua中的全局方法 LuaFunction luaFunction=luaEnv.Global.Get("addReturn"); //通过Call关键字调用方法,返回值为objct[] object[] objects=luaFunction.Call(100,200); Debug.Log(objects[0]+":"+objects[1]+":"+objects[2]);
转载地址:http://cfrxo.baihongyu.com/