博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
xLua(六)——C#访问Lua的function
阅读量:1985 次
发布时间:2019-04-27

本文共 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);}

 

 

——访问有多个返回值的function
Lua中的函数可以有多个返回值,而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(); }}

 

转载地址:http://qtyvf.baihongyu.com/

你可能感兴趣的文章
Oracle 作业记录
查看>>
putty连接AWS配置(multimedia project)
查看>>
Hourglass Network 沙漏网络 (pose estimation姿态估计)
查看>>
OpenCV实战(二)——答题卡识别判卷
查看>>
目标检测神经网络的发展历程(52 个目标检测模型)
查看>>
Boundary loss 损失函数
查看>>
神经网络调参实战(一)—— 训练更多次数 & tensorboard & finetune
查看>>
tensorflow使用tensorboard进行可视化
查看>>
神经网络调参实战(二)—— activation & initializer & optimizer
查看>>
凸优化 convex optimization
查看>>
数据库索引 & 为什么要对数据库建立索引 / 数据库建立索引为什么会加快查询速度
查看>>
IEEE与APA引用格式
查看>>
research gap
查看>>
pytorch训练cifar10数据集查看各个种类图片的准确率
查看>>
Python鼠标点击图片,获取点击点的像素坐标
查看>>
路径规划(一) —— 环境描述(Grid Map & Feature Map) & 全局路径规划(最优路径规划(Dijkstra&A*star) & 概率路径规划(PRM&RRT))
查看>>
神经网络调参实战(四)—— 加深网络层次 & 批归一化 batch normalization
查看>>
数据挖掘与数据分析(三)—— 探索性数据分析EDA(多因子与复合分析) & 可视化(1)—— 假设检验(μ&卡方检验&方差检验(F检验))&相关系数(皮尔逊&斯皮尔曼)
查看>>
RRT算法(快速拓展随机树)的Python实现
查看>>
路径规划(二) —— 轨迹优化(样条法) & 局部规划(人工势能场法) & 智能路径规划(生物启发(蚁群&RVO) & 强化学习)
查看>>