slua中,绑定lua文件到Monobehavior的一种方法
slua本身并不提供如何把一个lua文件绑定到一个预制中,就像一个普通的继承自monobehavior的自定义脚本那样,而tolua的框架却采用了拙劣的做法:
public class LuaBehaviour : Base {
private string data = null;
private AssetBundle bundle = null;
private Dictionary<string, LuaFunction> buttons = new Dictionary<string, LuaFunction>();
protected void Awake() {
Util.CallMethod(name, "Awake", gameObject);
}
protected void Start() {
Util.CallMethod(name, "Start");
}
protected void OnClick() {
Util.CallMethod(name, "OnClick");
}
protected void OnClickEvent(GameObject go) {
Util.CallMethod(name, "OnClick", go);
}
}
所以我琢磨了一下,在slua框架下用下面脚本来完成绑定:
using UnityEngine;
using System.Collections;
using SLua; public class LuaMonoBehavior : MonoBehaviour {
public string V_LuaFilePath; LuaTable self; [CustomLuaClass]
public delegate void UpdateDelegate(object self); UpdateDelegate ud;
UpdateDelegate enabled;
UpdateDelegate disabled;
UpdateDelegate destroyd; // Use this for initialization
void Start () {
LuaState.main.doFile(V_LuaFilePath);
self = (LuaTable)LuaState.main.run("main");
var update = (LuaFunction)self["update"];
var destroy = (LuaFunction)self["destroy"];
var enablef = (LuaFunction)self["enable"];
var disablef = (LuaFunction)self["disable"];
if (update != null) ud = update.cast<UpdateDelegate>();
if (destroy != null) destroyd = destroy.cast<UpdateDelegate>();
if (enablef != null) enabled = enablef.cast<UpdateDelegate>();
if (disablef != null) disabled = disablef.cast<UpdateDelegate>();
} void OnEnable()
{
if (enabled != null) enabled(self);
} void OnDiable()
{
if (disabled != null) disabled(self);
} // Update is called once per frame
void Update () {
if (ud != null) ud(self);
} void OnDestroy()
{
if (destroyd != null) destroyd(self);
}
}
对一个新预制,我们只需要挂上LuaMonoBehavior脚本并加上对应Lua文件路径即可,然后就在你的lua文件里控制逻辑了,这对热更新非常友好。
slua中,绑定lua文件到Monobehavior的一种方法的更多相关文章
- SLua 中使用 Lua 5.3 的编译工程
2016-03-05 更新: 之前编译的库,在 Android 下 Lua_Number 和 Lua_Integer 被编译为了32位,导致从 C# 到 Lua 过程中有64位到32位整型转换会出现溢 ...
- JAVA中获取文件MD5值的四种方法
JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...
- linux中删除文件内空白行的几种方法。
linux中删除文件内空白行的几种方法 有时你可能需要在 Linux 中删除某个文件中的空行.如果是的,你可以使用下面方法中的其中一个.有很多方法可以做到,但我在这里只是列举一些简单的方法. 你可能已 ...
- PHP中获取文件扩展名的N种方法
PHP中获取文件扩展名的N种方法 从网上收罗的,基本上就以下这几种方式: 第1种方法:function get_extension($file){substr(strrchr($file, '.'), ...
- Mac 中显示资源库(Library)文件夹目录的几种方法
Mac中Library目录在10.6.7系统之后默认隐藏的,要想找到此文件夹有如下几种方法: 1. 用命令可以使其显示: 在终端中执行命令: chflags nohidden ~/Library ...
- Shell脚本中执行sql语句操作mysql的5种方法【转】
对于自动化运维,诸如备份恢复之类的,DBA经常需要将SQL语句封装到shell脚本.本文描述了在Linux环境下mysql数据库中,shell脚本下调用sql语句的几种方法,供大家参考.对于脚本输出的 ...
- 页面中如何引用外部的HTML(四种方法)
页面中如何引用外部的HTML(四种方法) 一.总结 一句话总结:a.iframe标签 b.ajax引入代码片段 c.link import的方法导入 d.re ...
- JSON文件加注释的7种方法
JSON文件加注释的7种方法 缺省不能加注释,现实有需求 根据JSON规范(http://www.json.org, RFC 4627, RFC 7159),不支持注释.JSON规范之所以不允许加注释 ...
- 【转】oracle 中随机取一条记录的两种方法
oracle 中随机取一条记录的两种方法 V_COUNT INT:=0; V_NUM INT :=0; 1:TBL_MYTABLE 表中要有一个值连续且唯一的列FID BEGIN SELECT COU ...
随机推荐
- AutoMapper 9.0的改造
AutoMapper于2019.8.12升级9.0 从此不再支持静态的对象转换 自己琢磨了一下,写了一套扩展 官方链接如下 https://github.com/AutoMapper/AutoMapp ...
- [NLP]LSTM理解
简介 LSTM(Long short-term memory,长短期记忆)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失问题.以下先从RNN介绍. 简说RNN RNN(Recurrent ...
- 微信公众号如何将PDF上传到公众号?
微信公众号如何将PDF上? 我们都知道创建一个微信公众号,在公众号中发布一些文章是非常简单的,但公众号添加附件下载的功能却被限制,如今可以使用小程序“微附件”进行在公众号中添加附件. 以下是公众号添加 ...
- SCOI2020后摸鱼实况记录
6.27:回家之后摸摸摸,等辉夜更新辉夜真好看. 6.28:口胡了一场比赛,发现原题大战,感觉很有毒.然后不知道干了啥,一天就结束了.晚上发现兰斯10居然汉化了,马上跑去白嫖下载,waiting... ...
- HTML实例-02-京东顶部导航条
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- zabbix-4.4.4安装教程(亲测可用)
1.首先添加yum源zabbix.repo [zabbix]name=zabbixbaseurl=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/ ...
- mycat数据库集群系列之数据库多实例安装
mycat数据库集群系列之数据库多实例安装 最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据 ...
- Selenium数据驱动测试模型和实例
模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了. 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变. 装载数据的方式可以是列表. ...
- MySQL字符集操作
一.查看编码 show variables like 'character%'; 二.临时设置编码 1.set names xxx set names ${编码}; "set names x ...
- N46期第一周作业
1.解释drwx rwx rwx中每个字符表⽰什么? d : 表示目录文件 ①rwx表示UID的读写执行权限 ②rwx表示GID的读写执行权限 ③rwx表示other的读写执行权限 2.li ...