XLua:C#访问Lua中的table的几种方式

#C#访问Lua中的全局变量

###C#代码

luaEnv = new LuaEnv();
luaEnv.DoString("require 'CSharpCallLua'");

//获取Lua中的全局变量
string name = luaEnv.Global.Get<string>("name");
print("name:" + name);
int hp = luaEnv.Global.Get<int>("hp");
print("hp:" + hp);
bool isAlive = luaEnv.Global.Get<bool>("isAlive");
print("isAlive:" + isAlive);


###Lua代码

print("C#访问Lua中的全局变量");
hp = 100;
name = "Yuki"
isAlive = true

###输出

C#访问Lua中的全局变量
name:Yuki
hp:100
isAlive:True

#映射到class

  • 对lua中的table中的变量的修改不会影响到映射到的C#中的class中的字段,反之也是。
  • 这个过程是值拷贝,如果class比较复杂代价会比较大。而且修改class的字段值不会同步到table,反过来也不会。

###C#代码

luaEnv = new LuaEnv();
luaEnv.DoString("require 'CSharpCallLua'");

//映射到class
print("映射到class");
IRole role = luaEnv.Global.Get<IRole>("Yuki");
print("name:" + role.name);
luaEnv.Dispose();

class Role
{
    public string name;
    public int hp;
    bool isAlive;
}

###Lua代码

Yuki = {
	name = "Yuki", hp = 100, isAlive = true,
}

###输出

before modify hp in C#
LUA: hp in Lua is 100
after modify hp in C#
LUA: hp in Lua is 100

#映射到interface

  • 类似映射到class,但是映射方式为引用。
  • C#代码中访问Lua,需要在该interface上添加 [CSharpCallLua] 的特性,而Lua代码中访问C#则需要在Lua对应位置添加 [LuaCallCSharp] 的特性

###C#代码

luaEnv = new LuaEnv();
luaEnv.DoString("require 'CSharpCallLua'");

//映射到interface
print("映射到interface");
IRole role = luaEnv.Global.Get<IRole>("Yuki");
print("before modify hp in C#");
luaEnv.DoString("print('hp in Lua is ' .. Yuki.hp)");
role.hp -= 10;
print("after modify hp in C#");
luaEnv.DoString("print('hp in Lua is ' .. Yuki.hp)");

luaEnv.Dispose();

[CSharpCallLua]
interface IRole
{
    string name { get; set; }
    int hp { get; set; }
    bool isAlive { get; set; }
}

###Lua代码

Yuki = {
	name = "Yuki", hp = 100, isAlive = true,
}

###输出

before modify hp in C#
LUA: hp in Lua is 100
after modify hp in C#
LUA: hp in Lua is 90
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值