找回密码
 立即注册
查看: 275|回复: 0

xlua-C#访问lua全局函数

[复制链接]
发表于 2021-8-13 09:18 | 显示全部楼层 |阅读模式
  1. using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;/*
  2. * Author:W
  3. * C#访问Lua中全局函数
  4. */publicclassCSharpCallLua:MonoBehaviour{privateLuaEnv luaEnv;// Use this for initializationvoid Start (){
  5.                 luaEnv =newLuaEnv();
  6.                 luaEnv.DoString("require 'CSharpCallLua'");//方式1:C#中定义委托来和Lua中全局函数建立映射Addadd= luaEnv.Global.Get<Add>("add");add(2,3);Add2 add2 = luaEnv.Global.Get<Add2>("add2");int res =add2(4,5);
  7.                 Debug.Log("add2 res = "+res);Add3 add3 = luaEnv.Global.Get<Add3>("add3");int res2;int res3;int res4 =add3(6,8,out res2,out res3);
  8.                 Debug.Log("add3 res4="+res4+" res2="+res2+" res3="+res3);
  9.                 Debug.Log("==========================================");//方式2:使用xlua自带的LuaFunction函数建立映射,无需创建委托//缺点:慢,不推荐使用LuaFunction luaFunction = luaEnv.Global.Get<LuaFunction>("add3");object[] oArr = luaFunction.Call(2,6);foreach(object o in oArr){
  10.                         Debug.Log(o);}}//针对无返回的[CSharpCallLua]delegatevoidAdd(int a,int b);//针对Lua中返回一个结果的[CSharpCallLua]delegateintAdd2(int a,int b);//针对Lua返回多个结果的 注意:out与ref都可以[CSharpCallLua]delegateintAdd3(int a,int b,outint res2,outint res3);privatevoidOnDestroy(){if(luaEnv !=null)
  11.                         luaEnv.Dispose();}}
复制代码
lua脚本
  1. function add(a,b)
  2.   print("Add")
  3. end
  4. function add2(a,b)return a+b
  5. end
  6. function add3(a,b)return a+b,a,b
  7. end
复制代码
运行结果截图如下:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 08:54 , Processed in 0.070216 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表