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);}

 

 

——访问有多个返回值的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(); }}

 

转载地址:https://liuhaowen.blog.csdn.net/article/details/89329717 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:基础知识——常用单位介绍
下一篇:xLua(五)——C#访问Lua的table

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月24日 15时00分01秒