Unity的学习笔记(XLua的初学用法并在lua中使用unity周期函数)
自己最近也在研究怎么用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 initialization
void Start () {
LuaEnv lua = new LuaEnv(); //首先必须要做这一步,类似new一个类的用法,只是这个换成了Lua
lua.AddLoader(CustomLoader); //这个是将一个自定义载入的路径给Lua,这样就能在这个自定义路径进行查找
lua.DoString("require 'MainLua'"); //这是载入一个名字为MainLua的lua脚本
} // Update is called once per frame
void 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 = local function UpdataLua()
timeCount = timeCount + CS.UnityEngine.Time.deltaTime
print(timeCount)
end luaBehaviour.luaUpdate = UpdataLua -- 将Lua中的函数加入到这个委托里面(第一次只能用 = ,不能 +=,因为会报空,但是在C#中,第一次使用就可以+=
Unity的学习笔记(XLua的初学用法并在lua中使用unity周期函数)的更多相关文章
- 触发器学习笔记(:new,:old用法)
触发器学习笔记(:new,:old用法) 触发器是数据库发生某个操作时自动运行的一类的程序 用于保持数据的完整性或记录数据库操作信息方面 触发器不能够被直接调用,只能够 ...
- C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法
C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的 ...
- MVC学习笔记(三)—用EF向数据库中添加数据
1.在EFDemo文件夹中添加Controllers文件夹(用的是上一篇MVC学习笔记(二)—用EF创建数据库中的项目) 2.在Controllers文件夹下添加一个空的控制器(StudentsCon ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二)
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第七章:在Direct3D中绘制(二) 代码工程地址: https:/ ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第六章:在Direct3D中绘制 代码工程地址: https://gi ...
- Unity Shader学习笔记-1
本篇文章是对Unity Shader入门精要的学习笔记,插图大部分来自冯乐乐女神的github 如果有什么说的不正确的请批评指正 目录 渲染流水线 流程图 Shader作用 屏幕映射 三角形遍历 两大 ...
- JAVA学习笔记 (okHttp3的用法)
最近的项目中有个接口是返回文件流数据,根据我们这边一个验签的插件,我发现里面有okHttpClient提供了Call.Factory,所以就学习了下okHttp3的用法. 1.概述 okhttp是一个 ...
- Unity Shader学习笔记 - 用UV动画实现沙滩上的泡沫
这个泡沫效果来自远古时代的Unity官方海岛Demo, 原效果直接复制3个材质球在js脚本中做UV动画偏移,这里尝试在shader中做动画并且一个pass中完成: // Upgrade NOTE: r ...
- 【Unity Shader学习笔记】Unity光照基础-高光反射
1.原理 1.1.Phong模型 计算高光反射需要表面法线.视角方向.光源方向.反射方向等. 在这四个矢量中,我们实际上只需要知道其中3个矢量即可,而第4个矢量(反射方向r)可以通过其他信息计算得到: ...
随机推荐
- nodejs之MongoDB安装[windows平台]
下载MongoDB,本为下载msi文件安装,下载地址 下载完成之后直接双击文件安装,安装时注意安装路径 创建一个空文件夹,用于存放数据库文件 通过控制台进入安装目录下的bin目录,或者在bin ...
- gitbook+git+typora 的使用过程
Typora 下载地址:https://typora.io/ gitbook 第一步:安装 npm install -g gitbook-cli 第二步:使用 对要操作的文件夹执行命令 gitbook ...
- 读入优化&输出优化
读入优化 int read() { ; ') ; '; ') num=num*+c-'; return ff*num; } 输出优化 void write(int x) { ) { putchar(' ...
- 第12组 Alpha冲刺(5/6)
Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 展示Git当日代码/文档签入记录(组内共享) 注: 由于GitHub的免费范围内对多人开发存在较多限 ...
- csp退役前的做题计划1(真)
csp退役前的做题计划1(真) 因为我太菜了,所以在第一次月考就会退役,还是记录一下每天做了什么题目吧. 任务计划 [ ] Z算法(Z Algorithm) 9.28 [x] ARC061C たくさん ...
- 当变量超过任意设定的变量限制时终止fluent模拟【翻译】
一些时候某个特定的变量(压力,速度,温度等)发散会造成不合理的计算结果.在许多算例,当变量超过某些合理的限制时,自动停止/打断模拟是有帮助的. 解决方法是联合UDF和scheme文件.UDF将会遍历所 ...
- Hadoop综合大作业1
本次作业来源于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3363 一.课程评分标准: 分数组成: 考勤 10 平时作业 30 爬 ...
- [转]Vue-Devtools安装配置教程(献给伸手党)
原文地址:https://blog.csdn.net/weixin_38654336/article/details/80790698 可以先看视频教程:链接 最简便的方法是用FQ来通过google应 ...
- win10磁盘分区
注意:未分配的磁盘是无法使用的. 安装系统的时候,我们可以先将系统装起来,再来对未分配的磁盘进行操作. 具体步骤:https://jingyan.baidu.com/article/fcb5aff76 ...
- [LeetCode] 325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
Given an array nums and a target value k, find the maximum length of a subarray that sums to k. If t ...