游戏技术文章

.net core中加载lua脚本的类库: MoonSharp

时间:2017-2-7 12:54:46  作者:棋牌资源网  来源:棋牌资源网  查看:7908  评论:0
内容摘要:前言MoonSharp是一个支持C#调用lua脚本的类库,支持.net, .net core, mono, unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单;官网:http://www.moonsharp.org/源码:https://githu...

前言

MoonSharp是一个支持C#调用lua脚本的类库,支持.net, .net core, mono, unity,因此在.net core中也能够使用,而且加载和调用lua也很方便简单;

官网:http://www.moonsharp.org/

源码:https://github.com/xanathar/moonsharp

nuget:PM> Install-Package MoonSharp 

 

使用

加载脚本

复制代码
1             string scriptCode = @"    
2                 sum = 0
3                 for i = 1, 100 do
4                     sum = sum + i
5                 end
6                 return sum";
7             DynValue res = Script.RunString(scriptCode);    //运行脚本
8             Console.WriteLine(res.Number);  //输出:5050
复制代码

加载脚本文件:

Console.WriteLine(Script.RunFile("luatest.txt").Number);   //指定文件名加载脚本并运行

文件内容:

.net_core中加载lua脚本的类库:_MoonSharp View Code

 

传递数据(lua全局变量)

复制代码
 1             string scriptCode = @"    
 2                 function fact (n)
 3                     if (n == 0) then
 4                         return 1
 5                     else
 6                         return n*fact(n - 1)
 7                     end
 8                 end
 9                 return fact(num)";  
10 
11             Script script = new Script();
12             script.Globals["num"] = 5;  //对脚本中的全局变量 num 赋值
13 
14             Console.WriteLine(script.DoString(scriptCode).Number);  //输出:120
复制代码

 

lua函数的定义与调用

复制代码
 1             Script script = new Script();
 2             //先加载定义的函数
 3             script.DoString(@"
 4                     function fact(n)
 5                         if (n == 0) then
 6                             return 1
 7                         else
 8                             return n * fact(n - 1)
 9                         end
10                     end
11                 ");
12 
13             //如果该函数会重复利用的,那么就应该这么调用,而不是每次都调用DoString加载脚本调用(每次都加载脚本是费性能的)
14             Console.WriteLine(script.Call(script.Globals["fact"], 5).Number);   //输出:120
15             Console.WriteLine(script.Call(script.Globals["fact"], DynValue.NewNumber(5)).Number);   //和上面的一样
复制代码
传递集合参数
复制代码
 1             Script script = new Script();
 2             script.DoString(@"
 3                 function sum(list)
 4                     local total = 0;
 5                     for i,v in ipairs(list) do
 6                         total = total + v;
 7                     end
 8                     return total;
 9                 end
10                 ");
11 
12             Console.WriteLine(script.Call(script.Globals["sum"], new List<int>() { 1, 3, 5, 7, 9 }));  //输出:25
复制代码
多值返回:Tuple
复制代码
 1             Script script = new Script();
 2             script.DoString(@"
 3                 function sum(kv)
 4                     local total = 0;
 5                     local ks = '';
 6                     for k,v in pairs(kv) do
 7                         total = total + v;
 8                         ks = ks .. k .. ',';    --字符串拼接
 9                     end
10                     return ks, total;   --多值返回:Tuple
11                 end
12                 ");
13 
14             var dict = new Dictionary<string, int>()  //传递字典
15             {
16                 { "k1", 1 },
17                 { "k2", 2 },
18                 { "k3", 3 },
19             };
20             var tp = script.Call(script.Globals["sum"], dict).Tuple;  //返回tuple类型
21             Console.WriteLine(tp[0].String);    //输出:k1,k2,k3,
22             Console.WriteLine(tp[0].Number);    //输出:0, 如果是String类型的调用Number会输出:0
23             Console.WriteLine(tp[1].Number);  //输出:6
复制代码

 

lua脚本中加载和调用C#代码定义的函数

复制代码
 1         public static void CallList()
 2         {
 3             Script script = new Script();
 4             script.Globals["getlist"] = (Func<List<int>, List<int>>)GetList;    //加载C#中定义的函数
 5             script.DoString(@"
 6                 function sum(list)
 7                     local total = 0;
 8                     for i,v in ipairs(list) do
 9                         total = total + v;
10                     end
11                     return total;
12                 end
13                 ");
14 
15             string scode = @"return sum(getlist( { 11, 12, 13, 14, 15 } ))";    //脚本中调用C#中定义的函数
16             Console.WriteLine(script.DoString(scode));  //输出:120
17 
18         }
19 
20         private static List<int> GetList(List<int> list)
21         {
22             for (int i = 1; i <= 10; i++)
23                 list.Add(i);
24             return list;
25         }

标签:.netcore中加载lua脚本的类库: MoonSharp 

欢迎加入VIP,【VIP售价:只要288元永久VIP会员】畅享商业棋牌游戏程序下载,点击开通!

下载说明


☉本站所有源码和资源均由站长亲自测试-绝对保证都可以架设,运营!
☉如源码和资源有损坏或所有链接均不能下载,请告知管理员,

☉本站软件和源码大部分为站长独资,资源购买和收集,放心下载!

☉唯一站长QQ:1004003180  [人格担保-本站注重诚信!]

☉购买建议E-mail:1004003180@qq.com   源码收购 E-mail:1004003180@qq.com    

☉本站文件解压密码  【文章内都自带解压密码,每个密码不同!】


本站提供的所有源码,均来源站长提供,仅学习交流 浙ICP备09009969号

由此产生不良后果和法律责任与本站无关,如果侵犯了您的版权,请来信告知 1004003180@qq.com 将及时更正和删除! 

Copyright © 2008-2024 棋牌资源网,你身边的棋牌资源下载站    All Rights Reserved