Unity SLua 如何调用Unity中C#方法

简介:

1.原理

就是通常在Lua框架中所说的,开放一个C#的web接口,或者叫做在Slua框架中注册函数。

2.作用

在Lua中调用C#中的方法,这个是在做热更新中很常用的一种方法,无论是slua,还是lua,都差不多、这里,我拿slua举例。

3.实际运用 举例:如何在Slua中打印Log

原理:其实是slua通过调用C#中的Debug.Log方法实现的打印,并不是说是lua中的打印方法起到作用。

步骤:

首先,既然是Lua调用C#中的方法,这里自定义写一个打印log的方法。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public  class  CDebug {
 
     /// <summary>
     /// lua中打印Log
     /// </summary>
     /// <param name="title">标题</param>
     /// <param name="contents">内容</param>
     public  static  void  Log( string  title, string  contents)
     {
         int  level = 3;
         //这里代码不需要解释把,如果对颜色有需求,可以自己稍微修改一下。
         switch (level)
         {
             case  1:
                 Debug.Log(contents);
                 break ;
             case  2:
                 Debug.LogWarning(title+ ":" + contents);
                 break ;
             case  3:
                 Debug.LogError(title +  ":"  + contents);
                 break ;
             default :
                 Debug.Log(contents);
                 break ;
         }
     }
}

  I:

注意图中 标红。一般每个lua框架中,都会有这么个注册函数,加了这个注册函数。才会,有下面那步。执行。

 

II:

点击 Slua->Custom->Make

之后,发现编译之后,多一个:

 

III:

注意:之后我们可以看到多了一个脚本,用svn版本控制,对比一下文件,其实还是有其他地方改动的。

会发现BindCustom文件中的代码变成了

1
2
3
4
5
6
7
8
9
10
11
12
13
public  class  BindCustom {
         public  static  Action<intptr>[] GetBindList() {
             Action<intptr>[] list= {
 
                  Lua_CDebug.reg,  //这是自动生成的,多附加的
// 因为之前我们看到CustomExport脚本中的OnAddCustomClass方法中
//很多方法是被注释了,所以,需要手动把之前生成过的文件加上,具体看
//SVN版本控制对比一下BundCustom脚本,需要把之前生成过的代码
//手动加上。
//附加:这个不是什么BUG,因为别人以为所有需要在Lua中调用C#的代码都附加好了,
//所以,不需要了,假如我们的项目需要上线,也需要还原Log方法,因为他会打包到
//apk包中的.
</intptr></intptr>



本文转自 sshpp 51CTO博客,原文链接:http://blog.51cto.com/12902932/1926248,如需转载请自行联系原作者

相关文章
|
12天前
|
缓存 图形学
Unity C#for和foreach效率比较
该代码对比了三种遍历 `List&lt;int&gt;` 的方式的性能:使用缓存 `Count` 的 `for` 循环、每次访问 `list.Count` 的 `for` 循环以及 `foreach` 循环。通过 `Stopwatch` 测量每次遍历 300 万个元素所花费的时间,并输出结果。测试可在 Unity 环境中运行,按下空格键触发。结果显示,缓存 `Count` 的 `for` 循环性能最优,`foreach` 次之,而每次都访问 `list.Count` 的 `for` 循环最慢。
|
5月前
|
开发框架 .NET 程序员
C# 去掉字符串最后一个字符的 4 种方法
在实际业务中,我们经常会遇到在循环中拼接字符串的场景,循环结束之后拼接得到的字符串的最后一个字符往往需要去掉,看看 C# 提供了哪4种方法可以高效去掉字符串的最后一个字符
477 0
|
4月前
|
编译器 C#
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
C#多态概述:通过继承实现的不同对象调用相同的方法,表现出不同的行为
148 65
|
3月前
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
125 4
|
3月前
|
JSON 程序员 C#
使用 C# 比较两个对象是否相等的7个方法总结
比较对象是编程中的一项基本技能,在实际业务中经常碰到,比如在ERP系统中,企业的信息非常重要,每一次更新,都需要比较记录更新前后企业的信息,直接比较通常只能告诉我们它们是否指向同一个内存地址,那我们应该怎么办呢?分享 7 个方法给你!
|
3月前
|
C# UED SEO
C# 异步方法async / await任务超时处理
通过使用 `Task.WhenAny`和 `Task.Delay`方法,您可以在C#中有效地实现异步任务的超时处理机制。这种方法允许您在指定时间内等待任务完成,并在任务超时时采取适当的措施,如抛出异常或执行备用操作。希望本文提供的详细解释和代码示例能帮助您在实际项目中更好地处理异步任务超时问题,提升应用程序的可靠性和用户体验。
122 3
|
4月前
|
存储 C#
【C#】大批量判断文件是否存在的两种方法效率对比
【C#】大批量判断文件是否存在的两种方法效率对比
81 1
|
5月前
|
C#
C#一分钟浅谈:Lambda 表达式和匿名方法
本文详细介绍了C#编程中的Lambda表达式与匿名方法,两者均可用于定义无名函数,使代码更简洁易维护。文章通过基础概念讲解和示例对比,展示了各自语法特点,如Lambda表达式的`(parameters) =&gt; expression`形式及匿名方法的`delegate(parameters)`结构。并通过实例演示了两者的应用差异,强调了在使用Lambda时应注意闭包问题及其解决策略,推荐优先使用Lambda表达式以增强代码可读性。
81 8
|
4月前
|
C#
C#的方法的参数传递
C#的方法的参数传递
46 0
|
4月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
79 0