自己最近也在研究怎么用lua控制UI,然后看着网上介绍,决定选用XLua,毕竟TX爸爸出的,有人维护,自己琢磨着怎么用,于是弄出来一个能用的作为记录。

当然,XLua主要是用于热更新,我自己是拿来尝试用一下看看怎么和C#交互进行的。

然后是XLua的下载地址:https://github.com/Tencent/xLua

下载完了之后,把Assect文件夹下的东西放在工程里面,引入命名空间XLua就可以使用了。

using System.IO;  //引入这个空间是为了输入路径用
using UnityEngine;
using XLua;   //首先引入Xlua的命名空间public class CSToLua : MonoBehaviour {// Use this for initializationvoid Start () {LuaEnv lua = new LuaEnv();           //首先必须要做这一步,类似new一个类的用法,只是这个换成了Lualua.AddLoader(CustomLoader);         //这个是将一个自定义载入的路径给Lua,这样就能在这个自定义路径进行查找lua.DoString("require 'MainLua'");   //这是载入一个名字为MainLua的lua脚本
    }// Update is called once per framevoid Update () {}private byte[] CustomLoader(ref string filepath)      //这个是在网上查的,可以记下来作为一个API来使用,这个函数返回一个自定义路径
    {//重定向  可以在AB包里去读取 也可以指定 本地的一个路径string str = Application.dataPath + "/Lua/" + filepath + ".lua";Debug.Log(str);if( File.Exists(str))return File.ReadAllBytes(str);return null;}
}

这样执行了之后,那么Luau中又是怎么执行的呢?而且unity中,又update这样的生命周期函数,这些函数应该怎么用呢?接下来实现一下

首先,我们要在Unity中,建立一个委托,用来让Update来不停执行它

using UnityEngine;public delegate void LuaUpdate();public class LuaBehaviour : MonoBehaviour {public LuaUpdate luaUpdate;
void Start () {}
    // 将LuaUpdate委托放在Update周期函数里面一直执行void Update () {          if (luaUpdate != null)luaUpdate();    }
}

之后我们就是要用lua去找到这个挂载的代码,然后在lua中将需要反复执行的函数加入到LuaUpdate委托里面

--我把Lua挂载到ToLuaVoid这个物体上面的,所以先查找这个gameobject,用unity的时候,需要CS.(API所在的命名空间).Api
--至于什么时候用 ".",什么时候用":",我查过关系到是否传入self,不过自己还没理解,都是错了后改,改着改着知道这里用什么符号。。(大家查下其他资料吧)
luaBehaviour = CS.UnityEngine.GameObject.Find("ToLuaVoid"):GetComponent(typeof(CS.LuaBehaviour))  -- 这里获取组件,要用typeof(类型),因为lua中没有c# <T>这种泛型用法
local timeCount = 0local function UpdataLua()timeCount = timeCount + CS.UnityEngine.Time.deltaTimeprint(timeCount)
endluaBehaviour.luaUpdate = UpdataLua   -- 将Lua中的函数加入到这个委托里面(第一次只能用 = ,不能 +=,因为会报空,但是在C#中,第一次使用就可以+=

转载于:https://www.cnblogs.com/takanashi/p/11068995.html

Unity的学习笔记(XLua的初学用法并在lua中使用unity周期函数)相关推荐

  1. python里while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  2. python中while的用法_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  3. Unity Shader 学习笔记(33) 全局光照(GI)、反射探针、线性空间和伽马空间、高动态范围(HDR)

    Unity Shader 学习笔记(33) 全局光照(GI).反射探针.线性空间和伽马空间.高动态范围(HDR) 参考书籍:<Unity Shader 入门精要> [<Real-Ti ...

  4. 【Unity ASE学习笔记】

    Unity ASE学习笔记 一.工具比较 二.ASE插件工具下载 三.ASE界面 主要工作区详解 四.节点 常用节点概览 4.1.贴图节点 4.2.常数节点 4.3.四则运算(+ - * /) 4.4 ...

  5. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装

    Unity DOTS 学习笔记1 - ECS 0.50介绍和安装 为什么学习这个技术 ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计 ...

  6. Unity 2D 学习笔记:游戏实例Sunnyland

    Unity 2D 学习笔记:游戏实例Sunnyland 01安装软件&导入素材 02编辑素材&Tilemap 03图层layer&角色建立 04角色移动 05角色方向& ...

  7. Unity Shader 学习笔记(3)URP渲染管线带阴影PBR-Shader模板(ASE优化版本)

    此 Shader 已经不是最新版本,最新版本见本专栏的第四篇文章: Unity Shader 学习笔记(4) 材质面板截图: 功能实现(URP渲染管线下): PBR材质.投射和接收阴影. 代码展示: ...

  8. while用法python_Python学习笔记之While循环用法分析

    本文实例讲述了Python学习笔记之While循环用法.分享给大家供大家参考,具体如下: 前面一篇<Python学习笔记之For循环用法>详细介绍了Python for循环,这里再来讲述一 ...

  9. Unity Shader 学习笔记(27)渲染轮廓线(描边)方法、卡通风格渲染、素描风格渲染

    Unity Shader 学习笔记(27)渲染轮廓线(描边)方法.卡通风格渲染.素描风格渲染 参考书籍:<Unity Shader 入门精要> 渲染轮廓线(描边) 五种方法: 基于观察角度 ...

最新文章

  1. R语言使用两个分类变量创建双向表(Two Way Table、两个分类变量的频率表)实战: 矩阵的双向表、dataframe的双向表、条形图和马赛克图来可视化频率表
  2. 每个设计师应该阅读的8本书
  3. 电大本科计算机考试题库及答案,电大计算机考试题题库及答案.doc
  4. Linux服务器日常巡检脚本分享
  5. python 特性和方法同名_Python类:方法与属性同名
  6. message:MCODE参数不存在,mobile类型mcode参数必需
  7. 操作socket报Too many open files errno :24错误解决方法
  8. jquery动态插入行,不用拼写html,简洁版
  9. django跳转到其他页面的方式
  10. 【note】《软件体系结构》知识整理(1-5章)
  11. 【数据集】机器学习数据集汇总(附下载地址)
  12. (转)惊鸿一瞥:人工智能,改变研究方式的力量
  13. 2.Node.js快速入门
  14. 华为ensp 多区域OSPF配置
  15. 计算机蓝屏无法启动不了系统怎么办,电脑开机蓝屏死机,无法进入系统怎么办?...
  16. 通过命令符查看笔记本电脑的电池损耗
  17. POJ1091跳蚤(容斥 + 唯一分解 + 快速幂)
  18. Eclipse开发工具--使用JDT开发java程序
  19. 用Matlab画散点图
  20. 弄懂 JavaScript 执行机制,宏任务和微任务

热门文章

  1. 服务器脱机状态,从脱机工作切换到联机工作
  2. python getattr用法_python3,定制类,getattr相关用法
  3. 检测多边形是否重叠_只要保留定位感知通道,目标检测模型也能剪枝70%参数
  4. easymock_EasyMock TestNG示例
  5. testng 监听器_TestNG侦听器
  6. java 最佳主键_最佳Java 8书籍
  7. readline_Swift readLine(),Swift print()
  8. java repl_Java REPL – jshell
  9. Python SimpleHTTPServer – Python HTTP服务器
  10. day16-面向对象编程进阶