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

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

https://blog.csdn.net/u013826918/article/details/80822997

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


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12

###Lua代码

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

    1
    2
    3
    4

###输出

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

    1
    2
    3
    4

#映射到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;
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15

###Lua代码

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

    1
    2
    3

###输出

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

    1
    2
    3
    4

#映射到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; }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21

###Lua代码

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

    1
    2
    3

###输出

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

————————————————
版权声明:本文为CSDN博主「款冬」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013826918/article/details/80822997

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值