|
一、Lua
Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
相比C# Lua不需要编辑即可执行,所以Lua可以很好地用在Unity3D程序的热更新。
二、xLua
xLua是腾讯开发的开源Lua插件,它为Unity,.Net,Mono等C#环境增加Lua脚本编程的能力,借助xLua可以使lua代码与C#相互调用。
所以xLua可以很方便地实现Lua在Unity3D中的使用。
xLua下载地址 https://github.com/Tencent/xLua
三、使用
配置环境
1.创建一个新的Unity工程
2.打开下载好的xLua文件,如图
把Assets文件拷贝替换到新建的Unity工程即可。
这样Unity工程里就包含的xLua。
3.创建一个Txt文本作为Lua脚本,如图
Lua代码实现打印输出
创建一个空物体挂上LuaBehaviour脚本组件,并把刚创建好的lua txt文本拖到LuaScript上,如图
打开LuaBehaviour脚本,如下有对脚本的部分解释- //指定Lua脚本
- public TextAsset luaScript;
- public Injection[] injections;
- //Lua虚拟机运行的一个上下文对象
- internal static LuaEnv luaEnv = new LuaEnv(); //all lua behaviour shared one luaenv only!
- internal static float lastGCTime = 0;
- internal const float GCInterval = 1;//1 second
- private Action luaStart;
- private Action luaUpdate;
- private Action luaOnDestroy;
- //当前脚本执行环境
- private LuaTable scriptEnv;
- void Awake()
- {
- scriptEnv = luaEnv.NewTable();
- // 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突
- LuaTable meta = luaEnv.NewTable();
- meta.Set("__index", luaEnv.Global);
- scriptEnv.SetMetaTable(meta);
- meta.Dispose();
- //这里添加注册后,在Lua中使用self即为this
- scriptEnv.Set("self", this);
- //注册绑定其他对象
- foreach (var injection in injections)
- {
- scriptEnv.Set(injection.name, injection.value);
- }
- //执行Lua脚本代码
- luaEnv.DoString(luaScript.text, "LuaTestScript", scriptEnv);
- //添加生命周期函数
- Action luaAwake = scriptEnv.Get<Action>("awake");
- scriptEnv.Get("start", out luaStart);
- scriptEnv.Get("update", out luaUpdate);
- scriptEnv.Get("ondestroy", out luaOnDestroy);
- if (luaAwake != null)
- {
- luaAwake();
- }
- }
复制代码 上面已经有添加生命周期函数,所以我们可以加在Lua脚本加上这些方法函数- function awake()
- print("awake")
- end
- function start()
- print("Hellow")
- end
复制代码 保存后,运行输出结果
调用Unity组件
把空物体改为一个Cube
在 LuaBehaviourscript中有注册self指代this- scriptEnv.Set("self", this);
复制代码 所以在Lua中使用self即可访问当前对象
接下来就在Lua代码添加update函数,并实现立方体旋转的逻辑- function update()
- local speed = CS.UnityEngine.Time.deltaTime * 100
- self.transform:Rotate(0,speed,0)
- end
复制代码 注意:Lua中调用方法使用的是“:”
这样立方体就转起来了。
我们也可以添加指代对象,如下
在Lua中输出- function start()
- print(myName)
- end
复制代码 即能打印出当前物体的名称
访问其它物体对象
LuaBehaviourscript中定义了一个如下结构体- public class Injection
- {
- public string name;
- public GameObject value;
- }
复制代码 在组件上添加好要调用的物体和使用的名字即可通过该名字在Lua中访问改物体了。
例如,创建一个播放音频的对象
指定到Cube的LuaBehaviourscript组件中,如图
接下来在Lua中实现播放音频的方法- function start()
- print(myName)
- Audio:GetComponent("AudioSource"):Play()
- end
复制代码 保存运行就能实现音频播放了。
四、小结
xLua的初步使用大概就是这样了,要更熟练掌握的话除了更深入了解xLua插件外,还需要学习Lua的基本语法,它和C#还是有很多不一样的地方。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|