xlua-C#访问lua中的table

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XLua;
/*
 * Author:W
 * C#访问Lua中table
 */
public class CSharpCallLua : MonoBehaviour {

	private LuaEnv luaEnv;
	// Use this for initialization
	void Start () {
		luaEnv = new LuaEnv();

		luaEnv.DoString("require 'CSharpCallLua'");

		//方式1:通过映射类或结构体访问lua中的table
		//特点:通过值拷贝的形式,因此会比较耗费性能;另外,各自修改值,不会影响到对方
		Student student = luaEnv.Global.Get<Student>("Student");
		Debug.Log("方式1 普通类或结构体:Name=" + student.Name + " Age=" + student.Age);

		Debug.Log("===================================================");

		//方式2:通过接口访问lua中的table
		//特点:类似引用的方式,因此在C#中做修改,也会影响到lua中变量值
		IStudent student1 = luaEnv.Global.Get<IStudent>("Student");
		Debug.Log("方式2 接口:Name="+student1.Name+" Age="+student1.Age);
		student1.sum(1, 4);
		student1.sum2(5, 6);
		student1.sum3(7, 8);

		Debug.Log("===================================================");

		//方式3:通过Dictionary/List访问lua中的table
		//Dictionary只能访问到“key = value”的		
		Dictionary<string, object> Dict = luaEnv.Global.Get<Dictionary<string, object>>("DictAndList");
		foreach (string key in Dict.Keys)
		{
			Debug.Log("方式3:Dict字典="+ key+"-"+Dict[key]);
		}
		//List只能访问到只有value的
		List<object> Lists = luaEnv.Global.Get<List<object>>("DictAndList");
		foreach (object o in Lists)
		{
			Debug.Log("方式3:List集合= "+ o);
		}

		Debug.Log("===================================================");

		//方式4:使用xlua自带通用luaTable映射类来访问lua中的table
		//特点:不需要生成代码,但是慢,比方式2慢一个数量级,不推荐使用
		LuaTable luaTable = luaEnv.Global.Get<LuaTable>("Student");
		Debug.Log("方式4:LuaTabel类= Name-" +luaTable.Get<string>("Name")) ;


	}

	private void OnDestroy()
	{
		if (luaEnv != null)
			luaEnv.Dispose();
	}

	/// <summary>
	/// 对应的映射类
	/// </summary>
	class Student
	{
		public string Name;
		public int Age;
	}
	
}


/// <summary>
/// 对应的接口
/// 注意:必须加上[CSharpCallLua]标签
/// </summary>
[CSharpCallLua]
interface IStudent
{
	string Name { get; set; }
	int Age { get; set; }

	void sum(int a,int b);
	void sum2(int a, int b);

	void sum3(int a, int b);

}

lua脚本

Student =
{ Name="WangLunQiang",
  Age=35,
  --函数定义方式1
  sum = function(self,a,b)
    print("sum = ",a+b)
  end
  }
  --函数定义方式2:使用冒号,自动会赋值self
  function Student:sum2(a,b)
    print("sum2 = ",a+b)
  end
  
  --函数定义方式3;使用点,需要传入self自身参数
  function Student.sum3(self,a,b)
    print("sum3 = ",a+b)
  end
  
  DictAndList = {
    Name="WangLunQiang",
    Age=35,
	eat = function()
	  print("eat")
	end,
	2,
	4,
	"W",
  }

运行结果截图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值