通過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(); } |