许可优化
产品
解决方案
服务支持
关于
软件库
当前位置:服务支持 >  软件文章 >  Unity3D 使用xLua

Unity3D 使用xLua

阅读数 5
点赞 0
article_banner

一、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脚本,如下有对脚本的部分解释

  1. //指定Lua脚本
  2. public TextAsset luaScript;
  3. public Injection[] injections;
  4. //Lua虚拟机运行的一个上下文对象
  5. internal static LuaEnv luaEnv = new LuaEnv(); //all lua behaviour shared one luaenv only!
  6. internal static float lastGCTime = 0;
  7. internal const float GCInterval = 1;//1 second
  8. private Action luaStart;
  9. private Action luaUpdate;
  10. private Action luaOnDestroy;
  11. //当前脚本执行环境
  12. private LuaTable scriptEnv;
  13. void Awake()
  14. {
  15. scriptEnv = luaEnv.NewTable();
  16. // 为每个脚本设置一个独立的环境,可一定程度上防止脚本间全局变量、函数冲突
  17. LuaTable meta = luaEnv.NewTable();
  18. meta.Set("__index", luaEnv.Global);
  19. scriptEnv.SetMetaTable(meta);
  20. meta.Dispose();
  21. //这里添加注册后,在Lua中使用self即为this
  22. scriptEnv.Set("self", this);
  23. //注册绑定其他对象
  24. foreach (var injection in injections)
  25. {
  26. scriptEnv.Set(injection.name, injection.value);
  27. }
  28. //执行Lua脚本代码
  29. luaEnv.DoString(luaScript.text, "LuaTestScript", scriptEnv);
  30. //添加生命周期函数
  31. Action luaAwake = scriptEnv.Get<Action>("awake");
  32. scriptEnv.Get("start", out luaStart);
  33. scriptEnv.Get("update", out luaUpdate);
  34. scriptEnv.Get("ondestroy", out luaOnDestroy);
  35. if (luaAwake != null)
  36. {
  37. luaAwake();
  38. }
  39. }
cs
运行

上面已经有添加生命周期函数,所以我们可以加在Lua脚本加上这些方法函数

  1. function awake()
  2. print("awake")
  3. end
  4. function start()
  5. print("Hellow")
  6. end

保存后,运行输出结果

调用Unity组件

把空物体改为一个Cube

在 LuaBehaviourscript中有注册self指代 this

scriptEnv.Set("self", this);
cs
运行

所以在Lua中使用self即可访问当前对象

接下来就在Lua代码添加update函数,并实现立方体旋转的逻辑

  1. function update()
  2. local speed = CS.UnityEngine.Time.deltaTime * 100
  3. self.transform:Rotate(0,speed,0)
  4. end

注意:Lua中调用方法使用的是“:”

这样立方体就转起来了。

我们也可以添加指代对象,如下

在Lua中输出

  1. function start()
  2. print(myName)
  3. end

即能打印出当前物体的名称

访问其它物体对象

LuaBehaviourscript中定义了一个如下结构体

  1. public class Injection
  2. {
  3. public string name;
  4. public GameObject value;
  5. }
cs
运行

在组件上添加好要调用的物体和使用的名字即可通过该名字在Lua中访问改物体了。

例如,创建一个播放音频的对象

指定到Cube的LuaBehaviourscript组件中,如图

接下来在Lua中实现播放音频的方法

  1. function start()
  2. print(myName)
  3. Audio:GetComponent("AudioSource"):Play()
  4. end

保存运行就能实现音频播放了。

四、小结

xLua的初步使用大概就是这样了,要更熟练掌握的话除了更深入了解xLua插件外,还需要学习Lua的基本语法,它和C#还是有很多不一样的地方。

 


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删
相关文章
QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空