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的方法。
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文件中的代码变成了
public class BindCustom {
public static Action<IntPtr>[] GetBindList() {
Action<IntPtr>[] list= { Lua_CDebug.reg, //这是自动生成的,多附加的
// 因为之前我们看到CustomExport脚本中的OnAddCustomClass方法中
//很多方法是被注释了,所以,需要手动把之前生成过的文件加上,具体看
//SVN版本控制对比一下BundCustom脚本,需要把之前生成过的代码
//手动加上。
//附加:这个不是什么BUG,因为别人以为所有需要在Lua中调用C#的代码都附加好了,
//所以,不需要了,假如我们的项目需要上线,也需要还原Log方法,因为他会打包到
//apk包中的.
这样一个调用C#中的方法的功能做完了,其他的类似的,仿照这个例子就可以。
Unity SLua 如何调用Unity中C#方法的更多相关文章
- 使用RPC 调用NameNode中的方法
用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...
- smarty 截取字符串,调用php中的方法,foreach循环
1.smarty截取字符串 html中的代码 <{$content|truncate:30:"..."}> ...
- vue 在methods中调用mounted中的方法?
首先可以在data中先声明一个变量 比如 isShow=' ' mounted 中 ---> methods 中 ---> this.sureDelBox(item) 直接this调用 ...
- 在Android Studio中调用so中的方法
本节用的so是上节用Android Studio创建的so.想在Android Studio中调用so中的方法,需要先引用so.Android Studio中引用so的方法有二种,下面开始介绍. 一 ...
- thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)
thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...
- 【学习】调用iframe中的方法
当页面中有iframe时,想在主页面调用iframe中的方法,可以用contentWindow属性.但具体用时还有一点要注意,就是必须等页面加载完成才可以,否则会报错找不到函数. 例: 父页面: &l ...
- 使用AIDL远程调用服务中的方法
AIDL:android interface define language(接口定义语言) 作用:方便远程调用其他服务中的方法 注意:安卓四大组件都要在清单文件注册 aidl创建图: AIDL的全称 ...
- 纯静态界面中(html)中通过js调用dll中的方法从数据库中读取数据
最近接到一个离职员工的任务,一个搭好框架的ERP系统,看了两天,说一下看到的东西,整个项目目录中我没发现一个.aspx后缀的文件,全是静态HTML文件,之后发现他用的jquery简直看的头疼,不过大概 ...
- Unity调用安卓中的方法遇到的问题
最近在用U3D做一个简单的迷宫游戏,在项目中利用Unity制作游戏场景,在android中调用游戏场景,并在游戏结束后调用安卓方法,传递参数,退出游戏场景 查找网上资料,基本上Unity调用安卓的写法 ...
随机推荐
- SLF4J 的几种实际应用模式--之三:JCL-Over-SLF4J+SLF4J
我们前面已经讲过了 SLF4J 的两种用法:SLF4J+Log4J 和 SLF4J+Logback,那是在比较理想的情况下,所用组件只使用了 SLF4J 这一种统一日志框架的时候.可是 JCL 一直 ...
- CSS.04 -- 浮动float、overflow、定位position、CSS初始化
标准流:行内/行内块元素横向有序排列 : 块元素纵向有序排列. 浮动:Float 语法:float:left/right : 设置浮动的元素,脱离标准流 浮动的框可以向左或向右移动,直到它的外边缘碰 ...
- webpack使用总结
我们可以在js中引入样式文件 require('myStyle.css') 这时我们便需要引入相应的webpack loader来帮助我们解析这段代码. 一般来说需要引入css-loader和styl ...
- stl1
#include<iostream> #include<map> #include<string> using namespace std; map<st ...
- MyBatis使用statementType="STATEMENT"
statementType="STATEMENT"是使用非预编译,现在我需要动态传人表名和字段名,所以需要用STATEMENT,使用之后所有变量取值都要改成${xxxx},而不是# ...
- Realm数据持久化方案的简单介绍和使用(二)
接上篇... 4. 可空属性&默认值&忽略属性 默认情况下, 属性值可空, 如果强制要求某个属性非空, 可以使用如下方法: 遵循协议方法 + (NSArray *)requiredPr ...
- Activiti的全局事件机制及其监听处理
概述 Activiti在5.15以后的版本后,增加了统一的事件入口,不需要再像以前那样,监听流程的事件时,在流程定义的BPMN文件中为每个节点及流程增加以下的配置,以实现监听事件的做法,这种做法导致我 ...
- 4.Maven仓库
1. 何为Maven仓库 Maven仓库就是统一存放所有依赖的地方,其他所有项目都可以在仓库里通过坐标找到所需要的依赖. 2. 仓库的布局 任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中 ...
- 使用Jersey实现图片服务器与应用服务器分离
现在模拟一下Jersey从客户端发送图片到服务器. 1.Tomcat准备 (1)解压一个新的Tomcat作为图片服务器,然后修改端口号(有3处). (2)然 ...
- Maven项目热部署到Tomcat容器下
第一步: 配置Tomcat的登陆的用户名与密码 在 apache-tomcat-7.0.33\conf\ tomcat-users.xml,第40行添加如下: <role rolenam ...