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

xlua-C#访问lua中的table

[复制链接]
发表于 2021-8-12 19:20 | 显示全部楼层 |阅读模式
  1. using System.Collections;using System.Collections.Generic;using UnityEngine;using XLua;/*
  2. * Author:W
  3. * C#访问Lua中table
  4. */publicclassCSharpCallLua:MonoBehaviour{privateLuaEnv luaEnv;// Use this for initializationvoid Start (){
  5.                 luaEnv =newLuaEnv();
  6.                 luaEnv.DoString("require 'CSharpCallLua'");//方式1:通过映射类或结构体访问lua中的table//特点:通过值拷贝的形式,因此会比较耗费性能;另外,各自修改值,不会影响到对方Student student = luaEnv.Global.Get<Student>("Student");
  7.                 Debug.Log("方式1 普通类或结构体:Name="+ student.Name +" Age="+ student.Age);
  8.                 Debug.Log("===================================================");//方式2:通过接口访问lua中的table//特点:类似引用的方式,因此在C#中做修改,也会影响到lua中变量值IStudent student1 = luaEnv.Global.Get<IStudent>("Student");
  9.                 Debug.Log("方式2 接口:Name="+student1.Name+" Age="+student1.Age);
  10.                 student1.sum(1,4);
  11.                 student1.sum2(5,6);
  12.                 student1.sum3(7,8);
  13.                 Debug.Log("===================================================");//方式3:通过Dictionary/List访问lua中的table//Dictionary只能访问到“key = value”的               
  14.                 Dictionary<string,object> Dict = luaEnv.Global.Get<Dictionary<string,object>>("DictAndList");foreach(string key in Dict.Keys){
  15.                         Debug.Log("方式3:Dict字典="+ key+"-"+Dict[key]);}//List只能访问到只有value的
  16.                 List<object> Lists = luaEnv.Global.Get<List<object>>("DictAndList");foreach(object o in Lists){
  17.                         Debug.Log("方式3:List集合= "+ o);}
  18.                 Debug.Log("===================================================");//方式4:使用xlua自带通用luaTable映射类来访问lua中的table//特点:不需要生成代码,但是慢,比方式2慢一个数量级,不推荐使用LuaTable luaTable = luaEnv.Global.Get<LuaTable>("Student");
  19.                 Debug.Log("方式4:LuaTabel类= Name-"+luaTable.Get<string>("Name"));}privatevoidOnDestroy(){if(luaEnv !=null)
  20.                         luaEnv.Dispose();}/// <summary>/// 对应的映射类/// </summary>classStudent{publicstring Name;publicint Age;}}/// <summary>/// 对应的接口/// 注意:必须加上[CSharpCallLua]标签/// </summary>[CSharpCallLua]interfaceIStudent{string Name {get;set;}int Age {get;set;}voidsum(int a,int b);voidsum2(int a,int b);voidsum3(int a,int b);}
复制代码
lua脚本
  1. Student ={ Name="WangLunQiang",
  2.   Age=35,
  3.   --函数定义方式1
  4.   sum= function(self,a,b)
  5.     print("sum = ",a+b)
  6.   end
  7.   }
  8.   --函数定义方式2:使用冒号,自动会赋值self
  9.   function Student:sum2(a,b)
  10.     print("sum2 = ",a+b)
  11.   end
  12.   
  13.   --函数定义方式3;使用点,需要传入self自身参数
  14.   function Student.sum3(self,a,b)
  15.     print("sum3 = ",a+b)
  16.   end
  17.   
  18.   DictAndList ={
  19.     Name="WangLunQiang",
  20.     Age=35,
  21.         eat = function()
  22.           print("eat")
  23.         end,
  24.         2,
  25.         4,
  26.         "W",
  27.   }
复制代码
运行结果截图如下:

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-11-24 08:33 , Processed in 0.090040 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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