xLua(六)——C#访问Lua的function
发布日期:2021-06-30 19:59:10
浏览次数:3
分类:技术文章
本文共 3657 字,大约阅读时间需要 12 分钟。
首先在Lua脚本中写一些function
一:映射到委托(推荐使用)
——访问无参function
using XLua;using UnityEngine;using System;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); Action act = luaenv.Global.Get("fun1"); act(); //LUA:fun1 act = null; luaenv.Dispose(); }}
——访问有参function 运行后会报错:这个类型必须添加[CSharpCallLua]的标识 所以我们需要映射到委托中,添加[CSharpCallLua]的标识 ——————正确的完整代码如下:
using XLua;using UnityEngine;using System;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); Add act = luaenv.Global.Get("fun2"); act(1,2); //LUA:3 act = null; luaenv.Dispose(); } [CSharpCallLua] delegate void Add(int a, int b);}
——访问有一个返回值的function
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); Add act = luaenv.Global.Get("fun3"); string returnNum = act(1, 2); //LUA:3 print(returnNum); //一个返回值 act = null; luaenv.Dispose(); } [CSharpCallLua] delegate string Add(int a, int b);}
——访问有多个返回值的functionLua中的函数可以有多个返回值,而C#中的函数最多只能有一个返回值,那么如果Lua中的函数有多个返回值的情况下,C#如何获取到多个返回值呢? 可以映射到out或者ref参数来获取:
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); Add act = luaenv.Global.Get("fun4"); int n1, n2; string n3; act(1, 2, out n1, out n2, out n3); //LUA:3 print(n1 + "-" + n2 + "-" + n3); //1-2-第三个返回值 act = null; luaenv.Dispose(); } [CSharpCallLua] delegate void Add(int a, int b, out int returnValue1, out int returnValue2, out string returnValue3);}
注意映射之后的Action对象引用了Lua虚拟机,所以使用完需要将Action对象置为空,不然会报错
二:映射到LuaFunction
与LuaTable相同,xLua也提供了一种直接访问Lua中函数的方法,同样性能很低,不推荐使用
——访问无参function
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); LuaFunction act = luaenv.Global.Get("fun1"); act.Call(); //LUA:fun1 luaenv.Dispose(); }}
——访问有参function
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); LuaFunction act = luaenv.Global.Get("fun2"); act.Call(1,2); //LUA:3 luaenv.Dispose(); }}
——访问有一个返回值的function
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); LuaFunction act = luaenv.Global.Get("fun3"); object[] o=act.Call(1,2); //LUA:3 foreach (object temp in o) { print(temp); //一个返回值 } luaenv.Dispose(); }}
——访问有多个返回值的function
using XLua;using UnityEngine;public class CsCallLua : MonoBehaviour{ private void Start() { LuaEnv luaenv = new LuaEnv(); luaenv.DoString("require '1'"); LuaFunction act = luaenv.Global.Get("fun4"); object[] o=act.Call(1,2); //LUA:3 foreach (object temp in o) { print(temp); //1 //2 //第三个返回值 } luaenv.Dispose(); }}
转载地址:https://liuhaowen.blog.csdn.net/article/details/89329717 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2024年04月24日 15时00分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tf rnn输入输出的维度和权重的维度
2019-04-30
检验是否服从同一分布
2019-04-30
tf callbacks
2019-04-30
keras、tf、numpy实现logloss对比
2019-04-30
Ubuntu20.04安装微信
2019-04-30
Restful风格的使用
2019-04-30
Swagger基础入门整合SpringBoot
2019-04-30
MyBatisPlus简单入门(SpringBoot)
2019-04-30
攻防世界web进阶区NewsCenter详解
2019-04-30
攻防世界web进阶PHP2详解
2019-04-30
如何解决词达人问题(新)
2019-04-30
攻防世界web进阶区easytornado详解
2019-04-30
攻防世界web进阶区web2详解
2019-04-30
xss-labs详解(上)1-10
2019-04-30
xss-labs详解(下)11-20
2019-04-30
攻防世界web进阶区ics-05详解
2019-04-30
攻防世界web进阶区FlatScience详解
2019-04-30
攻防世界web进阶区ics-04详解
2019-04-30
攻防世界web进阶区Cat详解
2019-04-30
攻防世界web进阶区bug详解
2019-04-30