热更新中的lua与c#

热更新使用lua脚本与C#脚本进行互相调用,所以首先要了解这两种不同语言之间是如何进行调用的。

暂时版:http://pan.baidu.com/s/1eSzcSWM

重中之重,------->luainterface

引入luainterface.dll和luanet.dll库,添加对这个两个dll库的引用,这是准备工作。

第一部分 在C#中使用lua解释器

首先就是创建lua解释器

            //1. 使用lua解释器
            Lua lua = new Lua();
            lua["yes"] = 34;
            lua["no"] = "string value";
            lua.NewTable("mytable");
            Console.WriteLine(lua["yes"]);
            Console.WriteLine(lua["no"]);
输出:


调用lua解释器中的内置函数

            /*
               script.lua content
               print("hahaha")             
            */
            lua.DoString("num=2");//使用DoString创建变量
            lua.DoString("str='a string'");

            object[] retVals = lua.DoString("return num,str");//使用DoString返回变量值
            foreach (object item in retVals)
            {
                Console.WriteLine(item); //print : 2 a string
            }
输出:


如何注册C#的函数到lua解析器中

            // 1.把一个类中的普通方法注册进去
            lua.RegisterFunction("NormalMethod", obj, obj.GetType().GetMethod("NormalMethod"))
lua.DoString(" NormalMethod()");

            //2.把一个类的静态方法注册进去
            lua.RegisterFunction("StaticMethod", null, typeof(ClassName).GetMethod("StaticMethod"))
lua.DoString(" StaticMethod()")
测试
            //非静态方法注册
            Program p = new Program();
            Lua lua = new Lua();
            lua.RegisterFunction("TestMethod", p, p.GetType().GetMethod("TestFunction"));
            lua.DoString("TestMethod(1,2)");//传入参数即可

            //静态方法注册
            //Lua lua = new Lua();

            lua.DoFile("test.lua");
            lua.RegisterFunction("StaticMethodTest", null, typeof(Program).GetMethod("TestFunctionTo"));//注意函数公有
            lua.DoString("StaticMethodTest()");

        }

        //非静态方法的注册
        public void TestFunction(int a, int b)
        {
            Console.WriteLine(a + b);
        }

        //静态方法的注册
       public static void TestFunctionTo()
        {
            Console.WriteLine("this is static method...");
        }

第二部分 如何在lua中调用C#

这里需要理解的就是,我们在lua中调用C#,然后lua脚本执行也可以放在C#中使用解析器执行

lua脚本

/*
						call
			      ------------>
			lua                         C#
				  <------------
						excute
*/

require "luanet" --call bridge
luanet.load_assembly("luainterface learn") --use bridge call assembly.dll 
GameSceneCallBack=luanet.import_type("luainterface_learn.GameScene")--call calss.
calssInit=GameSceneCallBack()

calssInit:Test()--call method.
sceneName,outValue=calssInit:Test("scene_ui/uiTask") 
print(sceneName,  outValue)
print(calssInit.GameSceneName)--call filed
print(calssInit.LoadPath)
源类:

/// luainterface.dll 
namespace luainterface_learn//***luainterface_learn
{
     class GameScene
    {
        private string GameSceneName = "LoginScene";
        public string LoadPath = "ui/Scene_uiChat";

         private void Test()
         {
             Console.WriteLine("this  is  lua test method ....");
         }

         string Test(string scenePath, out string SceneName)
         {
             SceneName = null;
             Console.WriteLine("do! call scene:"+scenePath);
             SceneName = "RoleSelect";

             return "this is test data";
         }
    }
}

解析器调用

            Lua lua=new Lua();
            lua.DoFile("ScriptTest.lua");

输出:

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值