通过Action委托访问
CSharpCallLua.lua.txt
function add(a,b) print(a+b) end |
CSharpCallLua.cs
using UnityEngine; using XLua; using System.Collections.Generic; using System;
public class CSharpCallLua : MonoBehaviour { void Start () { LuaEnv luaEnv = new LuaEnv(); luaEnv.DoString("require 'CSharpCallLua'");
//访问Lua中的全局函数 Action act1 = luaEnv.Global.Get<Action>("add"); act1(10,20); act1 = null;//必须置空,否则释放虚拟机时会报错
luaEnv.Dispose(); } } |
通过自定义委托访问
CSharpCallLua.lua.txt
function add(a,b) print(a+b) return a+b,a,b end |
CSharpCallLua.cs
using UnityEngine; using XLua; using System.Collections.Generic; using System;
public class CSharpCallLua : MonoBehaviour { void Start () { LuaEnv luaEnv = new LuaEnv(); luaEnv.DoString("require 'CSharpCallLua'");
//映射到Delegate Add add = luaEnv.Global.Get<Add>("add"); int resa = 0; int resb = 0; int res = add(10, 20, out resa, out resb); print(res); //30 print(resa); //10 print(resb); //20 add = null;
luaEnv.Dispose(); }
[CSharpCallLua] delegate int Add(int a, int b,out int resa,out int resb); //自定义委托 // 第1个返回值 第2个返回值 第3个返回值 } |
通过LuaFunction访问Lua中的全局函数(性能慢)
CSharpCallLua.lua.txt
function add(a,b) print(a+b) return a+b,a,b end |
CSharpCallLua.cs
using UnityEngine; using XLua; using System.Collections.Generic; using System;
public class CSharpCallLua : MonoBehaviour { void Start () { LuaEnv luaEnv = new LuaEnv(); luaEnv.DoString("require 'CSharpCallLua'");
//映射到LuaFunction LuaFunction func = luaEnv.Global.Get<LuaFunction>("add"); object[] os= func.Call(1, 2);//os是所有的返回值 foreach (object o in os) { print(o); }
luaEnv.Dispose(); } |